Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Eu tenho 7 testes e recebi o dobro de mensagens

E ai, pessoal!

Não estou entendendo. Quando eu anoto o setUp() com @Before, eu tenho o dobro de "inicializando teste!". Quando eu não anoto, roda normal e imprime apenas uma mensagem.

Devo fazer a anotação ou não? Por que acontece isso? Segue um trecho do código:

public class AvaliadorTest
{
  private Avaliador leiloeiro;

  public void setUp()
  {
    leiloeiro = new Avaliador();
    System.out.println( "inicializando teste!" );
  }

  @Test
  public void deveValidarLancesEmOrdemCrescente()
  {
    Usuario joao = new Usuario( "João" );
    Usuario jose = new Usuario( "José" );
    Usuario maria = new Usuario( "Maria" );

    Lance maria_lance = new Lance( maria, 200 );
    Lance joao_lance = new Lance( joao, 300 );
    Lance jose_lance = new Lance( jose, 400 );

    Leilao leilao = new Leilao( "PS3 seminovo" );
    leilao.propoe( maria_lance );
    leilao.propoe( joao_lance );
    leilao.propoe( jose_lance );

    setUp();
    leiloeiro.avalia( leilao );

    double menorEsperado = 200;
    double maiorEsperado = 400;
    double mediaEsperada = 300;

    double delta = 0.00001;
    assertEquals( maiorEsperado, leiloeiro.getMaiorLance(), delta );
    assertEquals( menorEsperado, leiloeiro.getMenorLance(), delta );
    assertEquals( mediaEsperada, leiloeiro.getMedia(), delta );
  }

  @Test
  public void deveValidarApenasUmLance()
  {
    Usuario joao = new Usuario( "João" );

    Lance joao_lance = new Lance( joao, 300 );

    Leilao leilao = new Leilao( "PS3 seminovo" );

    leilao.propoe( joao_lance );

    setUp();
    leiloeiro.avalia( leilao );

    double menorEsperado = 300;
    double maiorEsperado = 300;
    double mediaEsperada = 300;

    double delta = 0.00001;
    assertEquals( maiorEsperado, leiloeiro.getMaiorLance(), delta );
    assertEquals( menorEsperado, leiloeiro.getMenorLance(), delta );
    assertEquals( mediaEsperada, leiloeiro.getMedia(), delta );
  }

tem outros testes, mas não cabe tudo.

Valeu!

2 respostas
solução!

Bom dia Vinicius.

Vamos primeiro pra definição. O @Before vai sempre ser executado antes de cada @Test.

http://junit.sourceforge.net/javadoc/org/junit/Before.html

Então, tendo isso em mente, o seu setUp() vai ser sempre executado antes de cada um dos seus testes.

Agora indo para o seu código, você tem nos métodos deveValidarLancesEmOrdemCrescente() e deveValidarApenasUmLance() uma chamada para o método setUp(), nesse momento há a re-execução do método que já vai ter rodado se tiver anotado com o @Before.

Resumindo:

  • Anotando o @Before no método setUp() faz com que ele seja executando antes de cada @Test
  • Os 2 métodos citado fazem chamada para o setUp(), o que causa a repetição

Solução pro seu problema:

  • Anote o @Before no método setUp() e remova a chamada dele dentro dos métodos, uma vez que o objeto ja vai estar inicializado

Pô, André! Eu não tinha prestado atenção que não deveria fazer a chamada do setUp() dentro dos outros métodos. O JUnit é muito mais inteligente que eu pensei e faz a chamada automaticamente por mim xD

Muito obrigado pelo esclarecimento!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software