JavaFaker - generator losowych danych

JavaFaker to biblioteka, dzięki której bez problemu wygenerujesz losowe dane takie jak imiona, nazwiska, nazwy miast, czy uczelni. Biblioteka umożliwia zwracanie danych w różnych językach i przyda się w każdej aplikacji, w której potrzebne są zestawy danych testowych. W tym artykule pokażę Ci, w jaki sposób możesz dodać tę bibliotekę do swojego projektu i jak wygenerować dzięki niej różne dane. Przykłady z tego artykułu znajdziesz na GitHubie.

Zależności

Bibliotekę możesz dodać do swojego projektu w postaci zależności Mavena, albo Gradle. Aktualną wersję biblioteki możesz sprawdzić w oficjalnym repozytorium na GitHubie.

Maven:

<dependency>
    <groupId>com.github.javafaker</groupId>
    <artifactId>javafaker</artifactId>
    <version>1.0.2</version>
</dependency>

Gradle:

dependencies {
    implementation 'com.github.javafaker:javafaker:1.0.2'
}

Kurs Java

Gotowe dane losowe

Najważniejszym elementem biblioteki JavaFaker jest klasa Faker, która umożliwia wygenerowanie losowych danych z różnych kategorii.

Faker faker = new Faker();
Name name = faker.name();
System.out.println("Losowe imiona i nazwiska:");
final int randomDataSize = 10;
for (int i = 0; i < randomDataSize; i++) {
    System.out.println("Imię: " + name.firstName());
    System.out.println("Nazwisko: " + name.lastName());
}

Powyższy kod odpowiada za wygenerowanie 10 losowych imion oraz nazwisk.

losowe dane w konsoli intellij

Oczywiście możliwości klasy Faker nie ograniczają się do generowania imion i nazwisk. Dane zostały podzielone na wiele kategorii, np.:

  • dane adresowe (metoda address()),
  • stanowiska pracy (metoda job()),
  • numery telefonów (metoda phoneNumber()),
  • nazwy uczelni (metoda university())
  • itp.

ale także dane bardziej nietypowe:

  • postaci z wiedźmina (metoda witcher()),
  • cytaty z dzieł Shakespeare (metoda shakespeare()),

i wiele więcej. Po pełną listę odsyłam Cię do strony projektu.

Internacjonalizacja

Biblioteka domyślnie generuje dane w języku angielskim, ale w prosty sposób możemy zmienić lokalizację, dzięki czemu otrzymamy dane w wielu innych językach, m.in. polskim, rosyjskim, czy hiszpańskim. Wystarczy, że do konstruktora klasy Faker przekażemy odpowiedni obiekt Locale, np.:

Faker faker = new Faker(new Locale("pl-PL"));

Listę wspieranych języków znajdziesz w opisie projektu.

Dane alfanumeryczne

Klasa Faker służy do generowania losowych wartości z określonych zbiorów danych. Czasami chcemy jednak wylosować całkowicie losowe ciągi alfanumeryczne, albo ciągi pasujące do określonego wzorca regex. Do tego celu służy klasa FakeValuesService, w której znajdziesz m.in. takie metody jak:

  • numerify(String numberString) - zwraca String, w którym znaki # zostaną podmienione na losową cyfrę z przedziału [0; 9],
  • letterify(String letterString) - zwraca String, w którym znaki ? zostaną podmienione na losowe znaki alfabetu,
  • bothify(String string) - zwraca String, w którym znaki # i ? zostaną podmienione w sposób analogiczne do metod numerify() i letterify(),
  • expression(String expression, Faker faker) - generowanie danych na bazie przekazanego Fakera. Wyrażenie może mieć postać typu #{Klasa.nazwaMetody}.

Przykłady

Losowy adres URL w domenie .pl, który będzie miał postać imienazwisko.pl:

Faker faker = new Faker(new Locale("pl-PL"));
FakeValuesService fakeValuesService = new FakeValuesService(new Locale("pl-PL"), new RandomService());
String url = fakeValuesService.expression("https://#{Name.firstName}#{Name.lastName}.pl", faker);

Losowy ciąg 5 znaków:

Faker faker = new Faker(new Locale("pl-PL"));
FakeValuesService fakeValuesService = new FakeValuesService(new Locale("pl-PL"), new RandomService());
String fiveLetterRandom = fakeValuesService.letterify("?????");

Dla wielkich znaków należy dodać flagę true jako drugi argument:

String fiveLetterRandom = fakeValuesService.letterify("?????", true);

Ciąg dziesięciu znaków, w którym na przemian mamy litery i liczby:

Faker faker = new Faker(new Locale("pl-PL"));
FakeValuesService fakeValuesService = new FakeValuesService(new Locale("pl-PL"), new RandomService());
String randomLettersDigits = fakeValuesService.bothify("?#?#?#?#?#");

Dyskusja i komentarze

Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.