9
respostas

TDD com exception nao interpreta a anotacao @Test(expected=RuntimeException.class)

Boa noite, meu teste nao funcionou ficou vermelho

    @Test(expected=RuntimeException.class)
    public void testNaoDeveAvaliarLeiloesSemNenhumLanceDado() {

            // Teste data builder
            Leilao leilao = new CriadorDeLeilao().para("Playstation 3 Novo").constroi();

            leiloeiro.avalia(leilao);
    }


    public void avalia(Leilao leilao) {

        if ( leilao.getLances().size() == 0)
            throw new RuntimeException("Não é possível avaliar um leilao sem lance");


        for ( Lance lance: leilao.getLances()) {


            if ( lance.getValor() >  maiorDeTodos )
                maiorDeTodos  = lance.getValor();

            if (lance.getValor() < menorDeTodos)
                menorDeTodos = lance.getValor();

        }
9 respostas

Olá Aurelio,

estranho, como está a classe CriadorDeLeilao? Deixa dar uma olhada nela também para ver se o problema não está na hora de construir o leilao.

Tenho um amigo de trabalho que conseguiu fazer funcionar com a versao 4.12

Estou usando a versao 4.8.2

Vou atualizar e fazer o teste

troquei o jar pelo 4.12 nao rodou

    @Test(expected=RuntimeException.class)
    public void testNaoDeveAvaliarLeiloesSemNenhumLanceDado() {


        throw new RuntimeException("teste");

        // Teste data builder
        //Leilao leilao = new CriadorDeLeilao().para("Playstation 3 Novo").constroi();
        //leiloeiro.avalia(leilao);

    }

Segue a classe CriadorLeilao

public class CriadorDeLeilao {

    private Leilao leilao;

    public CriadorDeLeilao para(String descricao) {
        this.leilao =  new Leilao(descricao); 

        return this;
    }

    public CriadorDeLeilao lance(Usuario usuario, double valor) {

        leilao.propoe( new Lance(usuario, valor));

        return this;
    }


    public Leilao constroi() {

        return this.leilao;
    }
}

Ele deu alguma exception na hora que você pediu a execução do teste?

Sim

ava.lang.RuntimeException: Não é possível avaliar um leilao sem lance
    at br.com.caelum.leilao.leilao.servico.Avaliador.avalia(Avaliador.java:22)
    at br.com.caelum.leilao.teste.AvaliadorTest.testNaoDeveAvaliarLeiloesSemNenhumLanceDado(AvaliadorTest.java:88)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at junit.framework.TestCase.runTest(TestCase.java:176)
    at junit.framework.TestCase.runBare(TestCase.java:141)
    at junit.framework.TestResult$1.protect(TestResult.java:122)
    at junit.framework.TestResult.runProtected(TestResult.java:142)
    at junit.framework.TestResult.run(TestResult.java:125)
    at junit.framework.TestCase.run(TestCase.java:129)
    at junit.framework.TestSuite.runTest(TestSuite.java:252)
    at junit.framework.TestSuite.run(TestSuite.java:247)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

Pera, tem algo estranho. Para ter dado esta exception o seu código em teoria está naquela primeira versão né:

@Test(expected=RuntimeException.class)
public void testNaoDeveAvaliarLeiloesSemNenhumLanceDado() {

            // Teste data builder
            Leilao leilao = new CriadorDeLeilao().para("Playstation 3 Novo").constroi();

            leiloeiro.avalia(leilao);
}

ele está exatamente assim?

Exato está assim:

@Test(expected=RuntimeException.class)
    public void testNaoDeveAvaliarLeiloesSemNenhumLanceDado() {


        Leilao leilao = new CriadorDeLeilao().para("Playstation 3 Novo").constroi();
        leiloeiro.avalia(leilao);

    }

Tá bem estranho, o código parece todo certo. Qual a versão do JUnit está no projeto? Me manda a classe do teste completa também , incluindo os imports da classe de teste.