En guide til JavaFaker

1. Oversigt

JavaFaker er et bibliotek, der kan bruges til at generere en bred vifte af rigtige data fra adresser til populære kulturreferencer.

I denne vejledning ser vi på, hvordan du bruger JavaFakers klasser til at generere falske data. Vi starter med at introducere Faker klasse og FakeValueService, inden vi går videre til introduktion af lokaliteter for at gøre dataene mere specifikke for et enkelt sted.

Endelig vil vi diskutere, hvor unikke dataene er. For at teste JavaFakers klasser bruger vi regelmæssige udtryk, du kan læse mere om dem her.

2. Afhængigheder

Nedenfor er den enkelte afhængighed, vi skal bruge for at komme i gang med JavaFaker.

For det første den afhængighed, vi har brug for til Maven-baserede projekter:

 com.github.javafaker javafaker 0.15 

For Gradle-brugere kan du tilføje følgende til din build.gradle fil:

kompilere gruppe: 'com.github.javafaker', navn: 'javafaker', version: '0.15'

3. FakeValueService

Det FakeValueService klasse giver metoder til generering af tilfældige sekvenser såvel som at løse .yml filer, der er knyttet til lokaliteten.

I dette afsnit dækker vi nogle af de nyttige metoder, som FakerValueService har at tilbyde.

3.1. Letterify, Numerificerog Bothify

Tre nyttige metoder er Letterify, Nummerérog Bothify. Letterify hjælper med at generere tilfældige sekvenser af alfabetiske tegn.

Næste, Numerificer genererer simpelthen numeriske sekvenser.

Langt om længe, Bothify er en kombination af de to og kan oprette tilfældige alfanumeriske sekvenser - nyttigt til at spotte ting som ID-strenge.

FakeValueService kræver en gyldig Lokalitet, samt en RandomService:

@Test offentlig ugyldig nårBothifyCalled_checkPatternMatches () kaster undtagelse {FakeValuesService fakeValuesService = ny FakeValuesService (ny lokalitet ("en-GB"), ny RandomService ()); Streng-e-mail = fakeValuesService.bothify ("???? ## @ gmail.com"); Matcher emailMatcher = Pattern.compile ("\ w {4} \ d{2}@gmail.com"). Matcher (email); assertTrue (emailMatcher.find ()); }

I denne enhedstest, vi oprette en ny FakeValueService med en lokalitet på da-DK og brug begge to metode til at generere en unik falsk Gmail-adresse.

Det fungerer efter erstatter '?' med tilfældige bogstaver og ‘#' med tilfældige tal. Vi kan derefter kontrollere, at output er korrekt med en simpel Matcher kontrollere.

3.2. Geneksekver

Tilsvarende geneksplicere genererer en tilfældig sekvens baseret på et valgt regex-mønster.

I dette uddrag bruger vi FakeValueService for at oprette en tilfældig sekvens efter et specificeret regex:

@Test offentlig ugyldighed givenValidService_whenRegexifyCalled_checkPattern () kaster undtagelse {FakeValuesService fakeValuesService = ny FakeValuesService (ny lokalitet ("en-GB"), ny RandomService ()); Streng alphaNumericString = fakeValuesService.regexify ("[a-z1-9] {10}"); Matcher alphaNumericMatcher = Pattern.compile ("[a-z1-9] {10}"). Matcher (alphaNumericString); assertTrue (alphaNumericMatcher.find ()); }

Vores kode opretter en alfanumerisk streng med små bogstaver med længde 10. Vores mønster kontrollerer den genererede streng mod regex.

4. JavaFaker's Faker Klasse

Det Faker klasse giver os mulighed for at bruge JavaFakers falske dataklasser.

I dette afsnit vil vi se, hvordan man kan starte en Faker indvende og brug den til at kalde falske data:

Faker faker = ny Faker (); Streng streetName = faker.address (). StreetName (); String number = faker.address (). BuildingNumber (); Strengby = faker.adresse (). By (); String country = faker.address (). Country (); System.out.println (String.format ("% s \ n% s \ n% s \ n% s", nummer, gadenavn, by, land));

Ovenfor bruger vi FakerAdresse objekt for at generere en tilfældig adresse.

Når vi kører denne kode, får vi et eksempel på output:

3188 Dayna Mountains New Granvilleborough Tonga

Vi kan se, at data har ingen enkelt geografisk placering da vi ikke angav et landestandard. For at ændre dette lærer vi at gøre dataene mere relevante for vores placering i næste afsnit.

Vi kunne også bruge dette forfalskning objekt på en lignende måde for at oprette data, der relaterer til mange flere objekter såsom:

  • Forretning
  • Øl
  • Mad
  • Telefonnummer

Du kan finde den fulde liste her.

5. Introduktion til lokaliteter

Her introducerer vi, hvordan man gør det Brug lokaliteter til at gøre de genererede data mere specifikke for en enkelt placering. Vi introducerer en Faker med en amerikansk lokalitet og en britisk lokalitet:

@Test offentlig ugyldighed givetJavaFakersWithDifferentLocals_thenHeckZipCodesMatchRegex () {Faker ukFaker = ny Faker (ny lokalitet ("en-GB")); Faker usFaker = ny Faker (ny lokalitet ("en-US")); System.out.println (String.format ("Amerikansk postnummer:% s", usFaker.address (). ZipCode ())); System.out.println (String.format ("Britisk postnummer:% s", ukFaker.address (). ZipCode ())); Mønster ukPattern = Mønster.kompil ("([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 ()); }

Ovenfor ser vi, at de to Fakers med det lokale match matcher deres regexes for landets postnumre.

Hvis lokaliteten gik til Faker findes ikke, den Faker kaster en LocaleDoesNotExistException.

Vi tester dette med følgende enhedstest:

@Test (forventet = LocaleDoesNotExistException.class) offentlig ugyldighed givenWrongLocale_whenFakerInitialised_testExceptionThrown () {Faker wrongLocaleFaker = ny Faker (ny Locale ("en-seaWorld")); }

6. Unikhed

Mens JavaFaker genererer tilsyneladende data tilfældigt, kan det unikke ikke garanteres.

JavaFaker understøtter såning af sin pseudo-tilfældige talgenerator (PRNG) i form af en RandomService at levere det deterministiske output af gentagne metodeopkald.

Kort sagt, pseudorandomness er en proces, der fremstår tilfældig, men ikke er.

Vi kan se, hvordan dette fungerer ved at oprette to Fakers med samme frø:

@Test offentlig ugyldighed givetJavaFakersWithSameSeed_whenNameCalled_CheckSameName () {Faker faker1 = ny Faker (ny tilfældig (24)); Faker faker2 = ny Faker (ny tilfældig (24)); assertEquals (faker1.name (). firstName (), faker2.name (). firstname ()); } 

Ovenstående kode returnerer det samme navn fra to forskellige forfalskere.

7. Konklusion

I denne vejledning har vi udforsket JavaFaker-bibliotek til generering af falske falske data. Vi har også dækket to nyttige klasser Faker klasse og FakeValueService klasse.

Vi undersøgte, hvordan vi kan bruge lokaliteter til at generere stedspecifikke data.

Endelig diskuterede vi, hvordan data, der genereres, virker kun tilfældige og dataenes unikke egenskaber garanteres ikke.

Som sædvanligt kan kodeuddrag findes på GitHub.