Um Guia para JavaFaker
1. Visão geral
JavaFaker é uma biblioteca que pode ser usada para gerar uma grande variedade de dados de aparência real, de endereços a referências culturais populares.
Neste tutorial, veremos como usar as classes do JavaFaker para gerar dados falsos. Começaremos apresentando a classeFaker eFakeValueService, antes de passar para a introdução de localidades para tornar os dados mais específicos para um único lugar.
Por fim, discutiremos como os dados são únicos. Para testar as classes do JavaFaker, faremos uso de expressões regulares, você pode ler mais sobre elashere.
2. Dependências
Abaixo está o únicodependency que precisamos para começar a usar o JavaFaker.
Primeiro, a dependência de que precisaremos para projetos baseados em Maven:
com.github.javafaker
javafaker
0.15
Para usuários do Gradle, você pode adicionar o seguinte ao seubuild.gradle file:
compile group: 'com.github.javafaker', name: 'javafaker', version: '0.15'
3. FakeValueService
A classeFakeValueService fornecemethods for generating random sequences , além de resolver.yml arquivos associados alocale.
Nesta seção, vamos cobrir alguns dos métodos úteis que oFakerValueService tem a oferecer.
3.1. Letterify,Numerify eBothify
Três métodos úteis sãoLetterify,Numberify eBothify. Letterify ajuda a gerarrandom sequences of alphabetic characters.
Em seguida,Numerify simplesmente gera sequências numéricas.
Finalmente,Bothify é uma combinação dos dois e cancreate random alphanumeric sequences - útil para simular coisas como strings de ID.
FakeValueService requer umLocale, válido, bem como umRandomService:
@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());
}
Neste teste de unidade, nóscreate a new FakeValueService com uma localidade deen-GB anduse the bothify method to generate a unique fake Gmail address.
Funciona porreplacing ‘?' with random letters and ‘#' with random numbers. Podemos então verificar se a saída está correta com uma verificação simples deMatcher.
3.2. Regexificar
Da mesma forma,regexify generates a random sequence based on a chosen regex pattern.
Neste snippet, usaremosFakeValueService para criar uma sequência aleatória seguindo um regex especificado:
@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());
}
Nossocode creates a lower-case alphanumeric string of length 10. Nosso padrão verifica a cadeia gerada em relação à regex.
4. ClasseFaker do JavaFaker
A classeFakerallows us to use JavaFaker’s fake data classes.
Nesta seção, veremos como instanciar um objetoFaker e usá-lo para chamar alguns dados falsos:
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));
Acima, usamos oFaker Address object to generate a random address.
Quando executarmos este código, obteremos um exemplo da saída:
3188
Dayna Mountains
New Granvilleborough
Tonga
Podemos ver quedata has no single geographical location, já que não especificamos uma localidade. Para mudar isso, aprenderemos a tornar os dados mais relevantes para nossa localização na próxima seção.
Também poderíamos usar esse objetofaker de maneira semelhante para criar dados relacionados a muitos outros objetos, como:
-
O negócio
-
Beer
-
Food
-
Número de telefone
Você pode encontrar a lista completahere.
5. Apresentando localidades
Aqui, vamos apresentar comouse locales to make the generated data more specific to a single location. Apresentaremos umFaker com uma localidade dos EUA e uma localidade do Reino Unido:
@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());
}
Acima, vemos que os doisFakers com a localidade correspondem às suas regexes para os códigos postais dos países.
If the locale passed to the Faker does not exist, the Faker throws a LocaleDoesNotExistException.
Vamos testar isso com o seguinte teste de unidade:
@Test(expected = LocaleDoesNotExistException.class)
public void givenWrongLocale_whenFakerInitialised_testExceptionThrown() {
Faker wrongLocaleFaker = new Faker(new Locale("en-seaWorld"));
}
6. Singularidade
Enquanto JavaFakerseemingly generates data at Random, the uniqueness cannot be guaranteed.
JavaFaker supports seeding of its pseudo-random number generator (PRNG) na forma deRandomService para fornecer a saída determinística de chamadas de método repetidas.
Simplificando, a pseudo-aleatoriedade é um processo que parece aleatório, mas não é.
Podemos ver como isso funciona criando doisFakers com a mesma semente:
@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());
}
O código acima retorna o mesmo nome de doisdifferent fakers.
7. Conclusão
Neste tutorial, exploramosJavaFaker library to generate real-looking fake data. Também cobrimos duas classes úteis, a classeFaker e a classeFakeValueService.
Exploramos como podemos usar localidades para gerar dados específicos do local.
Por fim, discutimos como odata generated only seems randome a exclusividade dos dados não são garantidos.
Como de costume, trechos de código podem ser encontrados emGitHub.