Eine Anleitung zu JavaFaker

1. Übersicht

JavaFaker ist eine Bibliothek, mit der eine Vielzahl realer Daten von Adressen bis hin zu populären Kulturreferenzen generiert werden können.

In diesem Tutorial sehen wir uns an, wie Sie mit JavaFaker-Klassen gefälschte Daten generieren. Wir beginnen mit der Einführung der Faker- Klasse und des FakeValueService , bevor wir mit der Einführung von Gebietsschemas fortfahren , um die Daten für einen einzelnen Ort spezifischer zu gestalten.

Abschließend werden wir diskutieren, wie eindeutig die Daten sind. Um die Klassen von JavaFaker zu testen, verwenden wir reguläre Ausdrücke. Weitere Informationen hierzu finden Sie hier.

2. Abhängigkeiten

Nachfolgend finden Sie die einzelne Abhängigkeit, die wir benötigen, um mit JavaFaker zu beginnen.

Erstens die Abhängigkeit, die wir für Maven-basierte Projekte benötigen:

 com.github.javafaker javafaker 0.15 

Für Gradle-Benutzer können Sie Ihrer build.gradle- Datei Folgendes hinzufügen :

compile group: 'com.github.javafaker', name: 'javafaker', version: '0.15'

3. FakeValueService

Die FakeValueService- Klasse bietet Methoden zum Generieren zufälliger Sequenzen sowie zum Auflösen von .yml- Dateien, die dem Gebietsschema zugeordnet sind.

In diesem Abschnitt werden einige der nützlichen Methoden behandelt, die der FakerValueService bietet.

3.1. Letterify , Numerify und Bothify

Drei nützliche Methoden sind Letterify , Numberify und Bothify . Letterify hilft dabei, zufällige Folgen von Buchstaben zu generieren .

Als nächstes generiert Numerify einfach numerische Sequenzen.

Schließlich ist Bothify eine Kombination aus beiden und kann zufällige alphanumerische Sequenzen erstellen - nützlich, um Dinge wie ID-Zeichenfolgen zu verspotten.

Für FakeValueService ist ein gültiges Gebietsschema sowie ein RandomService erforderlich:

@Test public void whenBothifyCalled_checkPatternMatches() throws Exception { FakeValuesService fakeValuesService = new FakeValuesService( new Locale("en-GB"), new RandomService()); String email = fakeValuesService.bothify("????##@gmail.com"); Matcher emailMatcher = Pattern.compile("\\w{4}\\d{2}@gmail.com").matcher(email); assertTrue(emailMatcher.find()); }

In diesem Komponententest erstellen wir einen neuen FakeValueService mit einem Gebietsschema von en-GB und verwenden die Bothify- Methode, um eine eindeutige gefälschte Google Mail-Adresse zu generieren .

Es funktioniert durch Ersetzen von ' ?' mit zufälligen Buchstaben und '#' mit zufälligen Zahlen . Wir können dann mit einer einfachen Matcher- Prüfung überprüfen, ob die Ausgabe korrekt ist .

3.2. Regexify

In ähnlicher Weise erzeugt Regexify eine zufällige Sequenz basierend auf einem ausgewählten Regex-Muster .

In diesem Snippet verwenden wir den FakeValueService , um eine zufällige Sequenz nach einem angegebenen regulären Ausdruck zu erstellen:

@Test public void givenValidService_whenRegexifyCalled_checkPattern() throws Exception { FakeValuesService fakeValuesService = new FakeValuesService( new Locale("en-GB"), new RandomService()); String alphaNumericString = fakeValuesService.regexify("[a-z1-9]{10}"); Matcher alphaNumericMatcher = Pattern.compile("[a-z1-9]{10}").matcher(alphaNumericString); assertTrue(alphaNumericMatcher.find()); }

Unser Code erstellt eine alphanumerische Kleinbuchstabenfolge mit der Länge 10 . Unser Muster vergleicht die generierte Zeichenfolge mit dem regulären Ausdruck.

4. JavaFaker's Faker- Klasse

Mit der Faker- Klasse können wir die gefälschten Datenklassen von JavaFaker verwenden .

In diesem Abschnitt erfahren Sie, wie Sie ein Faker- Objekt instanziieren und damit einige gefälschte Daten aufrufen:

Faker faker = new Faker(); String streetName = faker.address().streetName(); String number = faker.address().buildingNumber(); String city = faker.address().city(); String country = faker.address().country(); System.out.println(String.format("%s\n%s\n%s\n%s", number, streetName, city, country));

Oben verwenden wir das Faker Address- Objekt, um eine zufällige Adresse zu generieren .

Wenn wir diesen Code ausführen, erhalten wir ein Beispiel für die Ausgabe:

3188 Dayna Mountains New Granvilleborough Tonga

Wir können sehen, dass die Daten keinen einzigen geografischen Standort haben, da wir kein Gebietsschema angegeben haben. Um dies zu ändern, werden wir im nächsten Abschnitt lernen, die Daten für unseren Standort relevanter zu machen.

Wir könnten dieses Fälscherobjekt auch auf ähnliche Weise verwenden, um Daten zu erstellen, die sich auf viele weitere Objekte beziehen, wie z.

  • Geschäft
  • Bier
  • Essen
  • Telefonnummer

You can find the full list here.

5. Introducing Locales

Here, we'll introduce how to use locales to make the generated data more specific to a single location. We'll introduce a Faker with a US locale, and a UK locale:

@Test public void givenJavaFakersWithDifferentLocals_thenHeckZipCodesMatchRegex() { Faker ukFaker = new Faker(new Locale("en-GB")); Faker usFaker = new Faker(new Locale("en-US")); System.out.println(String.format("American zipcode: %s", usFaker.address().zipCode())); System.out.println(String.format("British postcode: %s", ukFaker.address().zipCode())); Pattern ukPattern = Pattern.compile( "([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|" + "(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y]" + "[0-9]?[A-Za-z]))))\\s?[0-9][A-Za-z]{2})"); Matcher ukMatcher = ukPattern.matcher(ukFaker.address().zipCode()); assertTrue(ukMatcher.find()); Matcher usMatcher = Pattern.compile("^\\d{5}(?:[-\\s]\\d{4})?$") .matcher(usFaker.address().zipCode()); assertTrue(usMatcher.find()); }

Above, we see that the two Fakers with the locale match their regexes for the countries zip codes.

If the locale passed to the Faker does not exist, the Faker throws a LocaleDoesNotExistException.

We'll test this with the following unit test:

@Test(expected = LocaleDoesNotExistException.class) public void givenWrongLocale_whenFakerInitialised_testExceptionThrown() { Faker wrongLocaleFaker = new Faker(new Locale("en-seaWorld")); }

6. Uniqueness

While JavaFaker seemingly generates data at Random, the uniqueness cannot be guaranteed.

JavaFaker supports seeding of its pseudo-random number generator (PRNG) in the form of a RandomService to provide the deterministic output of repeated method calls.

Simply put, pseudorandomness is a process that appears random but is not.

We can see how this works by creating two Fakers with the same seed:

@Test public void givenJavaFakersWithSameSeed_whenNameCalled_CheckSameName() { Faker faker1 = new Faker(new Random(24)); Faker faker2 = new Faker(new Random(24)); assertEquals(faker1.name().firstName(), faker2.name().firstName()); } 

The above code returns the same name from two different fakers.

7. Conclusion

In this tutorial, we have explored the JavaFaker library to generate real-looking fake data. We've also covered two useful classes the Faker class and the FakeValueService class.

We explored how we can use locales to generate location specific data.

Schließlich haben wir diskutiert, wie die generierten Daten nur zufällig erscheinen und die Eindeutigkeit der Daten nicht garantiert wird.

Wie üblich finden Sie Code-Schnipsel auf GitHub.