YAML e fixtures no Java, a vingança
Publicado em Developer
fixtures java junit testing yaml
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. :-)
Comentários
Comentários fechados.
Artigos anteriores
- Pull requests em modo raiz - sex, 22 de dezembro de 2023, 09:57:09 -0300
- Qual a idade do seu repositório? - ter, 27 de dezembro de 2022, 12:50:35 -0300
- Utilizando ctags em projetos Rails mais recentes - qui, 24 de junho de 2021, 08:23:43 -0300
- Fazendo o seu projeto brotar - seg, 15 de julho de 2019, 08:57:05 -0300
- Learn Functional Programming with Elixir - sex, 02 de março de 2018, 18:47:13 -0300
- Ambiente mínimo - Driver Driven Development - qua, 23 de agosto de 2017, 15:15:03 -0300
- Ambiente mínimo - repositórios de código - dom, 16 de abril de 2017, 13:02:14 -0300
- Ambiente mínimo - terminal e navegador - dom, 02 de abril de 2017, 21:43:29 -0300
- Utilizando muitas gems no seu projeto? - sáb, 29 de outubro de 2016, 11:57:55 -0200
- Desenvolvedores e inteligência artificial - seg, 11 de julho de 2016, 09:09:38 -0300
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
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!