Ръководство за JavaFaker

1. Общ преглед

JavaFaker е библиотека, която може да се използва за генериране на широк спектър от реално изглеждащи данни от адреси до референции за популярни култури.

В този урок ще разгледаме как да използваме класовете на JavaFaker за генериране на фалшиви данни. Ще започнем с въвеждането на класа Faker и FakeValueService , преди да преминем към въвеждане на локали, за да направим данните по-специфични за едно място.

Накрая ще обсъдим колко уникални са данните. За да тестваме класовете на JavaFaker, ще използваме регулярни изрази, можете да прочетете повече за тях тук.

2. Зависимости

По-долу е единичната зависимост, която ще ни е необходима, за да започнем с JavaFaker.

Първо, зависимостта, която ще ни е необходима за проекти, базирани на Maven:

 com.github.javafaker javafaker 0.15 

За потребители на Gradle можете да добавите следното към вашия файл build.gradle :

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

3. FakeValueService

Класът FakeValueService предоставя методи за генериране на произволни последователности, както и за разрешаване на .yml файлове, свързани с локала.

В този раздел ще разгледаме някои от полезните методи, които FakerValueService може да предложи.

3.1. Letterify , Numerify и Bothify

Три полезни метода са Letterify , Numberify и Bothify . Letterify помага да се генерират произволни последователности от азбучни символи .

След това Numerify просто генерира числови последователности.

И накрая, Bothify е комбинация от двете и може да създава произволни буквено-цифрови последователности - полезни за подиграване на неща като ID низове.

FakeValueService изисква валиден Locale, както и 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()); }

В този единичен тест създаваме нов FakeValueService с локал на en-GB и използваме метода bothify , за да генерираме уникален фалшив адрес в Gmail .

Той работи, като замества „ ?“ с произволни букви и „#“ с произволни числа . След това можем да проверим дали изхода е правилен с проста проверка на Matcher .

3.2. Регексифицирайте

По същия начин regexify генерира произволна последователност въз основа на избран модел на регулярно изражение .

В този фрагмент ще използваме FakeValueService, за да създадем произволна последователност след определен регекс:

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

Нашият код създава малки буквено-цифрови низ с дължина 10 . Нашият модел проверява генерирания низ спрямо регулярния израз.

4. JavaFaker е фалшификатор клас

Най- фалшификатор класа ни позволява да използваме класове фалшиви данни JavaFaker му .

В този раздел ще видим как да създадем екземпляр на обект Faker и да го използваме за извикване на някои фалшиви данни:

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

По-горе използваме обекта Faker Address, за да генерираме случаен адрес .

Когато стартираме този код, ще получим пример за изхода:

3188 Dayna Mountains New Granvilleborough Tonga

Виждаме, че данните нямат едно географско местоположение, тъй като не сме посочили локал. За да променим това, ще се научим да правим данните по-подходящи за нашето местоположение в следващия раздел.

Можем също така да използваме този фалшив обект по подобен начин, за да създадем данни, свързани с много повече обекти като:

  • Бизнес
  • Бира
  • Храна
  • Телефонен номер

Можете да намерите пълния списък тук.

5. Представяне на локали

Тук ще ви представим как да използвате локали, за да направите генерираните данни по-специфични за едно място . Ще представим Faker с локал в САЩ и локал във Великобритания:

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

По-горе виждаме, че двамата фалшификатори с локала съвпадат с техните регулярни изрази за пощенските кодове на страните.

Ако локалът, предаден на Faker , не съществува, Faker хвърля LocaleDoesNotExistException .

Ще тестваме това със следния единичен тест:

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

6. Уникалност

Докато JavaFaker привидно генерира данни в Random, уникалността не може да бъде гарантирана .

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.

Накрая обсъдихме как генерираните данни изглеждат само случайни и уникалността на данните не е гарантирана.

Както обикновено, кодови фрагменти могат да бъдат намерени в GitHub.