Un guide pour JavaFaker

Un guide pour JavaFaker

1. Vue d'ensemble

JavaFaker est une bibliothèque qui peut être utilisée pour générer un large éventail de données réelles, des adresses aux références de cultures populaires.

Dans ce didacticiel, nous allons voir comment utiliser les classes de JavaFaker pour générer de fausses données. Nous commencerons par présenter la classeFaker et lesFakeValueService, avant de passer à l’introduction des paramètres régionaux pour rendre les données plus spécifiques à un seul endroit.

Enfin, nous examinerons à quel point les données sont uniques. Pour tester les classes de JavaFaker, nous allons utiliser des expressions régulières, vous pouvez en savoir plus à leur sujethere.

2. Les dépendances

Vous trouverez ci-dessous lesdependencyuniques dont nous aurons besoin pour démarrer avec JavaFaker.

Premièrement, la dépendance dont nous aurons besoin pour les projets basés sur Maven:


    com.github.javafaker
    javafaker
    0.15

Pour les utilisateurs de Gradle, vous pouvez ajouter les éléments suivants à votre fichierbuild.gradle :

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

3. FakeValueService

La classeFakeValueService fournit lesmethods for generating random sequences  ainsi que la résolution des fichiers.yml associés auxlocale.

Dans cette section, nous allons couvrir quelques-unes des méthodes utiles que lesFakerValueService ont à offrir.

3.1. Letterify,Numerify etBothify

Trois méthodes utiles sontLetterify,Numberify etBothify. Letterify aide à générer desrandom sequences of alphabetic characters.

Ensuite,Numerify génère simplement des séquences numériques.

Enfin,Bothify est une combinaison des deux et peutcreate random alphanumeric sequences - utile pour se moquer de choses comme les chaînes d'identification.

FakeValueService nécessite unLocale, valide ainsi qu'unRandomService:

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

Dans ce test unitaire, nouscreate a new FakeValueService avec une locale deen-GB anduse the bothify method to generate a unique fake Gmail address.

Cela fonctionne parreplacing ‘?' with random letters and ‘#' with random numbers. Nous pouvons alors vérifier que la sortie est correcte avec une simple vérification deMatcher.

3.2. Regexify

De même,regexify generates a random sequence based on a chosen regex pattern.

Dans cet extrait de code, nous utiliserons lesFakeValueService pour créer une séquence aléatoire suivant une expression régulière spécifiée:

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

Noscode creates a lower-case alphanumeric string of length 10. Notre modèle vérifie la chaîne générée par rapport à la regex.

4. ClasseFaker de JavaFaker

La classeFakerallows us to use JavaFaker’s fake data classes.

Dans cette section, nous allons voir comment instancier un objetFaker et l'utiliser pour appeler de fausses données:

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));

Ci-dessus, nous utilisons lesFaker Address object to generate a random address.

Lorsque nous exécutons ce code, nous obtenons un exemple du résultat:

3188
Dayna Mountains
New Granvilleborough
Tonga

Nous pouvons voir que lesdata has no single geographical location puisque nous n’avons pas spécifié de paramètres régionaux. Pour changer cela, nous allons apprendre à rendre les données plus pertinentes par rapport à notre emplacement dans la section suivante.

Nous pourrions également utiliser cet objetfaker d'une manière similaire pour créer des données relatives à beaucoup plus d'objets tels que:

  • Affaires

  • Beer

  • Food

  • Numéro de téléphone

Vous pouvez trouver la liste complètehere.

5. Présentation des lieux

Ici, nous allons vous présenter commentuse locales to make the generated data more specific to a single location. Nous allons introduire unFaker avec un paramètre régional américain et un paramètre régional britannique:

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

Ci-dessus, nous voyons que les deuxFakers avec la locale correspondent à leurs expressions régulières pour les codes postaux des pays.

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

Nous allons tester cela avec le test unitaire suivant:

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

6. Unicité

Alors que JavaFakerseemingly generates data at Random, the uniqueness cannot be guaranteed.

JavaFaker supports seeding of its pseudo-random number generator (PRNG) sous la forme d'unRandomService pour fournir la sortie déterministe des appels de méthode répétés.

En termes simples, le pseudo-aléa est un processus qui semble aléatoire mais ne l’est pas.

Nous pouvons voir comment cela fonctionne en créant deuxFakers avec la même graine:

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

Le code ci-dessus renvoie le même nom à partir de deuxdifferent fakers.

7. Conclusion

Dans ce tutoriel, nous avons exploré lesJavaFaker library to generate real-looking fake data. Nous avons également couvert deux classes utiles, la classeFaker et la classeFakeValueService.

Nous avons exploré comment utiliser des paramètres régionaux pour générer des données spécifiques à un emplacement.

Enfin, nous avons discuté de la manière dont lesdata generated only seems random et l'unicité des données ne sont pas garantis.

Comme d'habitude, des extraits de code peuvent être trouvés surGitHub.