Руководство по JavaFaker

Руководство по JavaFaker

1. обзор

JavaFaker - это библиотека, которую можно использовать для генерации широкого спектра реальных данных от адресов до ссылок на популярную культуру.

В этом руководстве мы рассмотрим, как использовать классы JavaFaker для создания поддельных данных. Мы начнем с представления классаFaker иFakeValueService, прежде чем перейти к введению локалей, чтобы сделать данные более конкретными для одного места.

Наконец, мы обсудим, насколько уникальны данные. Для тестирования классов JavaFaker мы будем использовать регулярные выражения, вы можете узнать о них большеhere.

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

Ниже приведены отдельныеdependency, которые нам понадобятся для начала работы с JavaFaker.

Во-первых, зависимость, которая нам понадобится для проектов на основе Maven:


    com.github.javafaker
    javafaker
    0.15

Для пользователей Gradle вы можете добавить следующее в свойbuild.gradle file:

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

3. FakeValueServiceс

КлассFakeValueService предоставляетmethods for generating random sequences , а также разрешает файлы.yml, связанные сlocale.

В этом разделе мы рассмотрим некоторые полезные методы, которые может предложитьFakerValueService.

3.1. Letterify,Numerify иBothify

Три полезных метода:Letterify,Numberify иBothify. Letterify помогает генерироватьrandom sequences of alphabetic characters.

ЗатемNumerify просто генерирует числовые последовательности.

Наконец,Bothify представляет собой комбинацию двух и cancreate random alphanumeric sequences - полезно для имитации таких вещей, как строки идентификаторов.

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

В этом модульном тесте мыcreate a new FakeValueService с локальюen-GB anduse the bothify method to generate a unique fake Gmail address.

Работаетreplacing ‘?' with random letters and ‘#' with random numbers. Затем мы можем проверить правильность вывода с помощью простой проверкиMatcher.

3.2. Regexify

Аналогичноregexify generates a random sequence based on a chosen regex pattern.

В этом фрагменте мы будем использовать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());
}

Нашcode creates a lower-case alphanumeric string of length 10. Наш шаблон проверяет сгенерированную строку на соответствие регулярному выражению.

4. Класс JavaFakerFaker

КлассFakerallows us to use JavaFaker’s fake data classes.

В этом разделе мы увидим, как создать экземпляр объекта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 object to generate a random address.

Когда мы запустим этот код, мы получим пример вывода:

3188
Dayna Mountains
New Granvilleborough
Tonga

Мы видим, чтоdata has no single geographical location, поскольку мы не указали языковой стандарт. Чтобы изменить это, мы научимся делать данные более актуальными для нашего местоположения в следующем разделе.

Мы также могли бы использовать этот объектfaker аналогичным образом для создания данных, относящихся ко многим другим объектам, таким как:

  • Бизнес

  • Beer

  • Food

  • Номер телефона

Вы можете найти полный списокhere.

5. Знакомство с языками

Здесь мы расскажем, как использоватьuse locales to make the generated data more specific to a single location. Мы представим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());
}

Выше мы видим, что дваFakersс локалью соответствуют своим регулярным выражениям для почтовых индексов стран.

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

Мы проверим это с помощью следующего модульного теста:

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

6. уникальность

Хотя JavaFakerseemingly generates data at Random, the uniqueness cannot be guaranteed.

JavaFaker supports seeding of its pseudo-random number generator (PRNG) в формеRandomService, чтобы обеспечить детерминированный вывод повторных вызовов методов.

Проще говоря, псевдослучайность - это процесс, который кажется случайным, но это не так.

Мы можем увидеть, как это работает, создав дваFakersс одним и тем же семенем:

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

Приведенный выше код возвращает одно и то же имя из двухdifferent fakers.

7. Заключение

В этом руководстве мы изучилиJavaFaker library to generate real-looking fake data. Мы также рассмотрели два полезных класса: классFaker и классFakeValueService.

Мы изучили, как мы можем использовать локали для генерации данных о местоположении.

Наконец, мы обсудили, почемуdata generated only seems random и уникальность данных не гарантируются.

Как обычно, фрагменты кода можно найти наGitHub.