Para quem quer melhorar seu ambiente de testes e não gosta de fixtures nem centenas de código criando mock objects temos agora o fixture-factory bastante semelhante aos projetos factory_girl e o dm-sweatshop feitos em Ruby.
O framework possui uma api fluída gerando fake objects baseado em templates.
Exemplos:
Fixture.of(Client.class).addTemplate("valid", new Rule(){{
add("id", random(Long.class, range(1L, 200L)));
add("name", random("Anderson Parra", "Arthur Hirata"));
add("nickname", random("nerd", "geek"));
add("email", "${nickname}@gmail.com");
add("birthday", Calendar.getInstance());
add("address", fixture(Address.class, "valid"));
}});
Forma de utilização:
Client client = Fixture.of(Client.class).gimme("valid");
ou ainda vários objetos baseado no template:
List<Client> clients = Fixture.of(Client.class).gimme(5, "valid");
Suporte a geração reversa baseado em regex:
Fixture.of(Any.class).addTemplate("valid", new Rule(){{
add("id", regex("\\d{3,5}"));
add("phoneNumber", regex("(\\d{2})-(\\d{4})-(\\d{4})"));
});
Helpers para geração de datas
Fixture.of(Any.class).addTemplate("valid", new Rule(){{
add("dueDate", beforeDate("2011-04-15", new SimpleDateFormat("yyyy-MM-dd")));
add("payDate", afterDate("2011-04-15", new SimpleDateFormat("yyyy-MM-dd")));
add("birthday", randomDate("2011-04-15", "2011-11-07", new SimpleDateFormat("yyyy-MM-dd")));
});
Helper para geração de nomes próprios e palavras baseados em dicionário:
Fixture.of(Any.class).addTemplate("valid", new Rule(){{
add("firstName", firstName()); //exemplo de valor gerado: Christopher
add("lastName", lastName()); //exemplo de valor gerado: Armstrong
add("secretWord", regex("\\w{7}")); //exemplo de valor gerado: volante
});