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'
}
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.
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.