Logica de execução dos testes JUnits

5 respostas
rafael.moreira

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çou a rodar a classe de testes... 

setUp(); // metodo 1 
metodo1()... 
tearDown(); // metodo 1 

setUp(); //metodo 2 
metodo2()... 
tearDown(); //metodo 2 

setUp(); //metodo 3 
metodo3() ... 
tearDown(); //metodo 3 

...terminou de rodar a classe de testes.

Ou será que é desta forma…

Começou a rodar a classe de testes... 

setUp(); // metodo 1 
metodo1()... 

setUp(); //metodo 2 
metodo2()... 
tearDown(); // metodo 1 

setUp(); //metodo 3 
metodo3() ... 
tearDown(); //metodo 3 
tearDown(); //metodo 2 

...terminou de rodar a classe de testes.

… Tipo meio bagunçado.

Valeu!

5 Respostas

sales_paulo

Ola,

Para a classe de teste que segue:

import junit.framework.TestCase;

public class SampleTest extends TestCase {

     private java.util.List emptyList;

     /**
      * (Chamado antes de todo metodo de teste executado.) 
      */ 
     protected void setUp() { 
          emptyList = new java.util.ArrayList();
     } 

     /**
      * (Chamado apos todo metodo de teste executado.) 
      */ 
     protected void tearDown() { 
          emptyList = null; 
     } 

     public void testSomeBehavior() { 
          assertEquals("List vazia teve conter 0 elementos", 0, emptyList.size());
     } 

     public void testForException() { 
          try { 
               Object o = emptyList.get(0); 
               fail("Deve disparar um IndexOutOfBoundsException");
          } 
          catch (IndexOutOfBoundsException success) {
          } 
     } 
}
O Junit vai executar da seguinte maneira:

(1) setUp();

(2) testSomeBehavior()

(3) tearDown();

(4) setUp();

(5) testForException()

(6) tearDown();

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?

[]´s

Criado 24 de janeiro de 2008
Ultima resposta 24 de jan. de 2008
Respostas 5
Participantes 3