Blog

LISTAR TODOS OS POSTS - Assine os feeds dos posts e comentários

YAML e fixtures no Java, a vingança

Publicado/atualizado em 19/06/2010 19:21

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:

Permalink: http://eustaquiorangel.com/posts/yaml_e_fixtures_no_java_a_vinganca

salvar no del.icio.ussalvar no diggsalvar no rec6 Veja o que estão dizendo sobre isso.

Comente

Linhas em branco viram saltos de linha. Se você quiser mostrar algum código, por favor use o pastebin e informe a URL.

*

*

Responda: Qual a cor de um carro preto?  
Clique aqui se não souber essa resposta!

* campos obrigatórios

Comentários

1 - Rael disse em 22/06/2010 10:45

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!


2 - TaQ disse em 22/06/2010 19:16

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


Anterior Próximo Últimos Índice