Alguém sabe me dizer se existe alguma organização na forma que é executado os metodos de teste dentro de uma classe JUnit?
Por exemplo… sabemos que a cada metodo de teste é rodado um setUp() antes e um tearDown() depois… a pergunta é quando estao rodando os metodos por exemplo é desta forma que acontece os testes…
Começouarodaraclassedetestes...setUp();// metodo 1 metodo1()...tearDown();// metodo 1 setUp();//metodo 2 metodo2()...tearDown();//metodo 2 setUp();//metodo 3 metodo3()...tearDown();//metodo 3 ...terminouderodaraclassedetestes.
Ou será que é desta forma…
Começouarodaraclassedetestes...setUp();// metodo 1 metodo1()...setUp();//metodo 2 metodo2()...tearDown();// metodo 1 setUp();//metodo 3 metodo3()...tearDown();//metodo 3 tearDown();//metodo 2 ...terminouderodaraclassedetestes.
importjunit.framework.TestCase;publicclassSampleTestextendsTestCase{privatejava.util.ListemptyList;/***(Chamadoantesdetodometododetesteexecutado.)*/protectedvoidsetUp(){emptyList=newjava.util.ArrayList();}/***(Chamadoapostodometododetesteexecutado.)*/protectedvoidtearDown(){emptyList=null;}publicvoidtestSomeBehavior(){assertEquals("List vazia teve conter 0 elementos",0,emptyList.size());}publicvoidtestForException(){try{Objecto=emptyList.get(0);fail("Deve disparar um IndexOutOfBoundsException");}catch(IndexOutOfBoundsExceptionsuccess){}}}
OBS: Eh importante ressaltar que para testes unitarios nao podemos depender da ordem em que os metodos de teste sao executados, ou seja, nao podemos esperar que o metodo testlala1() seja executado antes do metodo testLala2() porque o metodo testLala2() depende de algo que o metodo testLala() faz. Tem um livro muito bom que explica exatamente o que deve ser feito para realizarmos testes unitarios de boa qualidade e totalmente independentes, segue o link http://www.linuxmall.com.br/index.php?product_id=3056.
Espero ter ajudado.
Att.
rafael.moreira
Sales, muito obrigado pela atenção. Sua explicação é muito boa mesmo, já suspeitava disso… só não queria acreditar na minha intuição, os logs já me mostravam essa ordem que você falou. Entendo também sua preocupação, sei que de um método a outro não deve haver dependencia alguma, todas elas devem ser criadas no setUp() quebradas no tearDown(). Para que o escopo de um metodo de teste não tenha nada haver com outro. O problema é que faço parte de uma equipe maior que possui um framework extremamente problemático, onde não tenho alternativas…
Minha questão é: existe uma camada que instancia um arquivo ‘.properties’ (eu no caso só estancio uma classe dessa camada no teste JUnit) que possui todos as querys a serem executadas no banco de dados. Não tenho qualquer acesso a este framework. Provavelmente este arquivo não esteja sendo desvinculado.
Mesmo assim obrigado pela atenção!
Abraço
Rafael Moreira
jgbt
Se o seu teste depende de um recurso externo, ele deixa de ser um teste de unidade e passa a ser um teste de integração.
Uma alternativa para evitar isso é usar Mocks para as dependencias.
[]´s
rafael.moreira
João, provavelmente meus poucos meses em java me levaram a cometer tal burrada, sim… neste caso, realmente são testes de integração, pois utilizam arquivos de fora que não podem ser substituídos por mock’s.
Existe alguma forma, via java, de eu forçar a quebra da execução de qualquer processo que esteja utilizando este arquivo?
Obrigado pela atenção.
jgbt
Mas qual problema esta ocorrendo??
o que significa “não desvincular o arquivo”.
poderia dar mais detalhes?