Ein Handbuch zu JavaFaker

Eine Anleitung zu JavaFaker

1. Überblick

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

In diesem Tutorial erfahren Sie, wie Sie mithilfe der JavaFaker-Klassen gefälschte Daten generieren. Wir beginnen mit der Einführung derFaker-Klasse und derFakeValueService, 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 JavaFaker-Klassen zu testen, verwenden wir reguläre Ausdrücke. Weitere Informationen finden Sie inhere.

2. Abhängigkeiten

Nachfolgend finden Sie die einzelnendependency, 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 Ihrerbuild.gradle -Datei Folgendes hinzufügen:

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

3. FakeValueService

Die KlasseFakeValueService bietetmethods for generating random sequences as sowie das Auflösen von.yml-Dateien, die denlocale zugeordnet sind.

In diesem Abschnitt werden einige der nützlichen Methoden behandelt, dieFakerValueService zu bieten hat.

3.1. Letterify,Numerify undBothify

Drei nützliche Methoden sindLetterify,Numberify undBothify. Letterify hilft,random sequences of alphabetic characters zu erzeugen.

Als nächstes erzeugtNumerify einfach numerische Sequenzen.

Schließlich istBothify eine Kombination aus beiden und kanncreate random alphanumeric sequences - nützlich zum Verspotten von Dingen wie ID-Zeichenfolgen.

FakeValueService erfordert ein gültigesLocale, sowie einRandomService:

@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 Unit-Test haben wircreate a new FakeValueService mit einem Gebietsschema vonen-GB anduse the bothify method to generate a unique fake Gmail address.

Es funktioniert mitreplacing ‘?' with random letters and ‘#' with random numbers. Wir können dann mit einem einfachenMatcher-Check überprüfen, ob die Ausgabe korrekt ist.

3.2. Erneut prüfen

In ähnlicher Weise istregexify generates a random sequence based on a chosen regex pattern.

In diesem Snippet verwenden wirFakeValueService, um eine zufällige Sequenz nach einem bestimmten 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());
}

Unserecode creates a lower-case alphanumeric string of length 10. Unser Muster vergleicht den generierten String mit dem regulären Ausdruck.

4. Faker-Klasse von JavaFaker

DieFaker Klasseallows us to use JavaFaker’s fake data classes.

In diesem Abschnitt erfahren Sie, wie Sie einFaker-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 wirFaker Address object to generate a random address.

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

3188
Dayna Mountains
New Granvilleborough
Tonga

Wir können sehen, dassdata has no single geographical location ist, 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 diesesfaker-Objekt auf ähnliche Weise auch verwenden, um Daten zu erstellen, die sich auf viele weitere Objekte beziehen, wie z.

  • Geschäft

  • Beer

  • Food

  • Telefonnummer

Sie finden die vollständige Listehere.

5. Einführung in Locales

Hier stellen wir vor, wieuse locales to make the generated data more specific to a single location. Wir führen einFaker mit einem US-Gebietsschema und einem britischen Gebietsschema ein:

@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());
}

Oben sehen wir, dass die zweiFakers mit dem Gebietsschema mit ihren regulären Ausdrücken für die Postleitzahlen des Landes übereinstimmen.

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

Wir testen dies mit dem folgenden Komponententest:

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

6. Einzigartigkeit

Während JavaFakerseemingly generates data at Random, the uniqueness cannot be guaranteed.

JavaFaker supports seeding of its pseudo-random number generator (PRNG) in Form vonRandomService, um die deterministische Ausgabe wiederholter Methodenaufrufe bereitzustellen.

Einfach ausgedrückt ist Pseudozufälligkeit ein Prozess, der zufällig erscheint, aber nicht zufällig ist.

Wir können sehen, wie dies funktioniert, indem wir zweiFakers mit demselben Startwert erstellen:

@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());
}

Der obige Code gibt denselben Namen von zweidifferent fakers. zurück

7. Fazit

In diesem Tutorial haben wir dieJavaFaker library to generate real-looking fake data untersucht. Wir haben auch zwei nützliche Klassen behandelt, dieFaker-Klasse und dieFakeValueService-Klasse.

Wir haben untersucht, wie wir mithilfe von Gebietsschemas standortspezifische Daten generieren können.

Schließlich haben wir diskutiert, wiedata generated only seems random und die Eindeutigkeit der Daten nicht garantiert werden können.

Wie üblich können Code-Schnipsel überGitHub gefunden werden.