TWiki home XP > XP > FatorarOsTestes (r1.1 vs. r1.4) XP webs:
Main | TWiki | Sandbox | Portugues
XP . { Bugzilla Últimas atualizações Busca Registro Sobre o TWiki }
 <<O>>  Difference Topic FatorarOsTestes (r1.4 - 18 Aug 2005 - MeLga)
Line: 1 31 to 1 32
Added:
>
>

Como testar isso? Capturando o AssertionError gerado pelo triangulo:

Line: 46 to 47
Deleted:
<
<
Como testar isso? Capturando o AssertionError gerado pelo triangulo:

 <<O>>  Difference Topic FatorarOsTestes (r1.3 - 20 Apr 2005 - MeLga)
Line: 1 32 to 1 31
Deleted:
<
<

Como testar isso? Capturando o AssertionError gerado pelo triangulo:


 <<O>>  Difference Topic FatorarOsTestes (r1.2 - 19 Apr 2005 - MeLga)
Line: 1 18 to 1 19
Added:
>
>

Vamos reescrever o teste... O teste atual está escrito como:

      Triangulo t3 = new Triangulo (2,3,-4);  
      assert (false == t3.éEquilátero()) :"NÃO é equilátero o triângulo (2,3,-4)";

e isso derruba o software, pois o cliente (nossa classe de testes) não respeita o contrato.

O que deveríamos realmente testar era: "Se for feita tentativa de criar triangulo com algum lado negativo, deve ser gerada uma exceção com a mensagem ' Lados devem ter valores positivos' "

Como testar isso? Capturando o AssertionError gerado pelo triangulo:


 try {
            t = new Triangulo(2, 3, -4);
        } catch (AssertionError ae) {
            assert (ae.getMessage().equals("Lados devem ter valores positivos"));
        }

Nosso código de Testes agora ficou assim:

Como testar isso? Capturando o AssertionError gerado pelo triangulo:


//Criado em 14/04/2005 

package TrianguloTDD;

//Última modificação 14/04/2005 fernando

public class Testar_Triangulo {

    public static void main(String argumento[]) {
        Triangulo t = new Triangulo(2, 3, 4);
        assert (t.éEscaleno()) : "O triangulo (2,3,4) é escaleno";

        Triangulo t1 = new Triangulo(2, 2, 2);
        assert (t1.éEquilátero()) : "O triangulo (2,2,2) é equilátero";
        assert (t1.éIsósceles()) : "O triangulo (2,2,2) é isósceles";

        assert (false == t.éIsósceles()) : "NÃO é isósceles o triângulo (2,3,4)";

        Triangulo t2 = new Triangulo(4, 4, 7);
        assert (t2.éIsósceles()) : "é isósceles o triângulo (4,4,7)";
        assert (false == t2.éEquilátero()) : "NÃO é equilátero o triângulo (4,4,7)";
        assert (false == t2.éEscaleno()) : "NÃO é escaleno o triângulo (4,4,7)";

        try {
            t = new Triangulo(2, 3, -4);
        } catch (AssertionError ae) {
            assert (ae.getMessage().equals("Lados devem ter valores positivos"));
        }

        try {
            t = new Triangulo(2, 3, 100);
        } catch (AssertionError ae) {
            assert (ae.getMessage().equals("Violadas as Desigualdades Triangulares"));
        }
        
        System.out.println("OK");

    }
}



 <<O>>  Difference Topic FatorarOsTestes (r1.1 - 19 Apr 2005 - MeLga)
Line: 1 to 1
Added:
>
>
META TOPICPARENT TesteNove
Fatorar o código de testes?

Sim... se não há nenhuma garantia de que sejamos infalíveis em nosso código de produção (porisso usamos os testes) então quem garante que não erramos em nosso código de testes?

O que nos está trancando, objetivamente, é o fato que, na verdade, não temos mais testes rodando. Nossos dois últimos testes apenas derrubam o software. Qual o problema?

O problema é simples: passamos a usar pré-condições em nosso código de produção (classe Triangulo).

Isso significa o estabelecimento de um contrato com nossos clientes: só aceitaremos lados válidos. Em troca, nunca construiremos triangulos inválidos, e permitimos a classificação do triangulo.

Cabe a nossos clientes cuidar de obedecer as pré-condições. E aqui foi nossa falha: nosso código de testes é um cliente de Triângulo, e não está cumprindo o contrato.

Que fazer?


Topic FatorarOsTestes . { View | Diffs | r1.4 | > | r1.3 | > | r1.2 | More }
Revision r1.1 - 19 Apr 2005 - 19:22 - MeLga
Revision r1.4 - 18 Aug 2005 - 11:56 - MeLga
Copyright © 1999-2003 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding XP? Send feedback.