YAML e fixtures no Java, a vingança
Publicado em Developer
Depois que eu brinquei um pouco com fixtures no Java, como mostra o post anterior, eu tive alguns problemas em relação à uma das libs utilizadas, e apesar de ter alertado o desenvolvedor sobre uma lentidão aparente no carregamento de um arquivo com dezenas de registros, não pude esperar por uma resposta e nem fuçar um pouco mais no código do bicho.
Foi mais rápido eu fazer uma solução do zero para resolver o meu problema, e como acontece com esses tipos de coisa, já liberei o código para quem precisar usar também.
Criei o projeto JTT - Java Table Test em poucas horas programando que já resolveram o problema. Para quem precisar, está aí o bicho, e se alguém tiver alguma idéia, ou melhoria no código, é só mandar um pull request ali pelo Github.
Aqui vai um exemplo simples de como fica um teste usando JUnit e o JTT (eita nominho sem inspiração):
1 import com.eustaquiorangel.jtabletest.*; 2 import java.sql.*; 3 import java.util.*; 4 import junit.framework.*; 5 6 public class SimpleJunitTest extends TestCase { 7 8 public void testBeatles() throws Exception { 9 JTableTest jt = new JTableTest("data.yml","sqlite"); 10 Query query; 11 12 jt.clean("customers"); 13 14 // test fixture 15 Map customers = jt.fixture("customers.yml"); 16 Map john = (Map) customers.get("john"); 17 Map george = (Map) customers.get("george"); 18 assertEquals(john.get("name"),"John Lennon"); 19 20 // test row count 21 query = jt.table("customers"); 22 assertTrue(query.count()==4); 23 24 // test row count with conditions 25 query = jt.table("customers").where("name like '%n'"); 26 assertTrue(query.count()==2); 27 assertEquals(query.column("name"),george.get("name")); 28 29 // test row count with conditions and order 30 query = jt.table("customers").where("name like '%n'").order("name desc"); 31 assertTrue(query.count()==2); 32 assertEquals(query.column("name"),john.get("name")); 33 } 34 } 35
Dá para basear um mais completo no exemplo do post anterior, usando a ferramenta nova. Achei até meio surreal, depois de uns 10 anos trabalhando com Java, fiz um projeto de Software Livre com ele apenas agora. Fazer o que, ainda tenho que usar o bicho. :-)
Tags:
Comentários
Comentários fechados.
TaQ, acessei lá o repositório e li a Wiki. Parabéns, muito bem documentado!
Realmente é uma mão na roda poder popular os dados via YAML. Fora que isso facilita muito pra deixar testers poderem manipular as entradas de dados!
Agora, sobre o assunto de custom libraries... eu tenho passado um pouco por isso (pegar coisa inchada demais pra casos simples), bastante em Java e PHP (principalmente pq em PHP algumas pessoas não "pensam dinamicamente", tendem apenas a tentar imitar o que é feito em Java).
E parabéns, de novo, por ter disponibilizado o código e feito a Wiki!
Rael, valeu!!! :-)
Sabe o que eu acho massa em utilizar ou não esses tipos de libraries? É que, partindo de uma idéia, e de código compartilhado, a gente pode reescrever, criar e fazer o que precisar. Imagina se o JYAML ou mesmo o dbAssert tivessem código fechado. No segundo caso, eu não poderia mostrar alguns pontos de gargalo e no primeiro, eu nem utilizaria. Viva o Software Livre e por conquência o código aberto, uhú! :-)
Agora, algumas estatísticas depois que comecei a utilizar o JTT: antes os testes com o dbAssert levavam 10 minutos. Comecei a rascunhar e foi para 1:30 minutos, e depois de feito do jeito que disponibilizei no Github, todos os testes agora levam entre 2 e 3 segundos! Segura, peão! :-D