Una guida a JavaFaker

1. Panoramica

JavaFaker è una libreria che può essere utilizzata per generare un'ampia gamma di dati dall'aspetto reale, dagli indirizzi ai riferimenti alla cultura popolare.

In questo tutorial, vedremo come utilizzare le classi di JavaFaker per generare dati falsi. Inizieremo introducendo la classe Faker e il FakeValueService , prima di passare all'introduzione delle impostazioni locali per rendere i dati più specifici per un singolo luogo.

Infine, discuteremo di quanto siano unici i dati. Per testare le classi di JavaFaker, utilizzeremo espressioni regolari, puoi leggere ulteriori informazioni su di esse qui.

2. Dipendenze

Di seguito è riportata la singola dipendenza di cui abbiamo bisogno per iniziare con JavaFaker.

Innanzitutto, la dipendenza di cui avremo bisogno per i progetti basati su Maven:

 com.github.javafaker javafaker 0.15 

Per gli utenti Gradle, puoi aggiungere quanto segue al tuo file build.gradle :

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

3. FakeValueService

La classe FakeValueService fornisce metodi per la generazione di sequenze casuali e per la risoluzione dei file .yml associati alla locale.

In questa sezione, tratteremo alcuni dei metodi utili che FakerValueService ha da offrire.

3.1. Letterify , Numerify e Bothify

Tre metodi utili sono Letterify , Numberify e Bothify . Letterify aiuta a generare sequenze casuali di caratteri alfabetici .

Successivamente, Numerify genera semplicemente sequenze numeriche.

Infine, Bothify è una combinazione dei due e può creare sequenze alfanumeriche casuali , utili per deridere cose come le stringhe ID.

FakeValueService richiede una Locale valida , oltre a un RandomService:

@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 questo unit test, creiamo un nuovo FakeValueService con una lingua en-GB e utilizziamo il metodo Bothify per generare un falso indirizzo Gmail univoco .

Funziona sostituendo " ?" con lettere casuali e "#" con numeri casuali . Possiamo quindi verificare che l'output sia corretto con un semplice controllo Matcher .

3.2. Regexify

Allo stesso modo, regexify genera una sequenza casuale basata su un pattern regex scelto .

In questo frammento, utilizzeremo FakeValueService per creare una sequenza casuale seguendo un'espressione regolare specificata:

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

Il nostro codice crea una stringa alfanumerica minuscola di lunghezza 10 . Il nostro modello controlla la stringa generata con la regex.

4. Classe Faker di JavaFaker

La classe Faker ci consente di utilizzare le classi di dati falsi di JavaFaker .

In questa sezione vedremo come istanziare un oggetto Faker e usarlo per chiamare alcuni dati falsi:

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

Sopra, usiamo l' oggetto Faker Address per generare un indirizzo casuale .

Quando eseguiamo questo codice, otterremo un esempio dell'output:

3188 Dayna Mountains New Granvilleborough Tonga

Possiamo vedere che i dati non hanno un'unica posizione geografica poiché non abbiamo specificato un locale. Per cambiare questo, impareremo a rendere i dati più pertinenti alla nostra posizione nella sezione successiva.

Potremmo anche usare questo oggetto falso in modo simile per creare dati relativi a molti più oggetti come:

  • Attività commerciale
  • birra
  • Cibo
  • Numero di telefono

Puoi trovare l'elenco completo qui.

5. Introduzione a Locales

Qui, introdurremo come utilizzare le impostazioni locali per rendere i dati generati più specifici per una singola posizione . Introdurremo un Faker con una località statunitense e una località britannica:

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

Sopra, vediamo che i due Faker con la lingua corrispondono alle loro espressioni regolari per i codici postali dei paesi.

Se la locale passata al Faker non esiste, il Faker genera un'eccezione LocaleDoesNotExistException .

Lo testeremo con il seguente test unitario:

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

6. Unicità

Sebbene JavaFaker generi apparentemente dati su Random, l'unicità non può essere garantita .

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.

Infine, abbiamo discusso di come i dati generati sembrano solo casuali e l'unicità dei dati non è garantita.

Come al solito, gli snippet di codice possono essere trovati su GitHub.