Testes com JUnit

Olá…

Estou começando a estudar testes com o JUnit e estou com uma dúvida básica:

Tenho uma classe que contém dois métodos… tenho que criar uma classe de teste para cada método
ou testar os dois métodos na mesma classe ??

Obrigado!

testa na mesma classe.

Só lembrando que os métodos de teste tem que começar com a palavra test :lol:

Vai da sua estratégia de testes, mas o mais comum é criar uma classe de testes para cada classe que se queira testar… E esta classe de testes deve testar todos os métodos da classe a ser testada :mrgreen: (Testes unitários)

Para testes de aceitação, o mais comum é testar as funcionalidades e não as classes…

[]s

Se for metódos de calculos eu faço da seguinte maneira

[code]import junit.framework.TestCase;

public class TestarExemplo extends TestCase{

public void testExemplo(){
	Exemplo ex = new Exemplo();
           assertEquals(2, ex.Soma(1,1));
           assertEquals(4, ex.Multiplica(2,2));
}

}[/code]

Pois varia de complexidade de seu código

Pessoal… estou tentando criar alguns testes aqui e quero a opnião de vocês: há algo que possa ser melhorado ?

Classe:

[code]public class Pessoa {

private int idade;

public int getIdade() {
    return idade;
}
public void setIdade(int idade) {
    this.idade = idade;
}

public Pessoa() {       
}

public boolean isMaiorDeIdade(Pessoa pessoa) {
    if(pessoa.getIdade() <= 18) {
        return true;
    }
    else {
        return false;
    }
}

}[/code]

Test:

[code]import junit.framework.TestCase;

public class TestPessoa extends TestCase {

public static void main(String[] args) {
    junit.textui.TestRunner.run(TestPessoa.class);
}

public void testIsMaiorDeIdade() {
    Pessoa pessoa = new Pessoa();
    pessoa.setIdade(15);
    assertTrue(pessoa.isMaiorDeIdade(pessoa));
}

}
[/code]

Obrigado!

o teste está legal, mas faz outros testes tb… nao teste apenas 16 anos… testa 19, 18, faz alguns testes pra ter mais certeza

Outra coisa interessante que falam por aí é fazer o teste ANTES de fazer o próprio método testado. Desse modo primeiro você especifica o “contrato” que o método deve cumprir, como se fosse uma especificação, depois então você implementa isso e roda o teste…

acho que ta bom assim.

mudaria so uma pouco o design da sua classe, acho que seu metodo não precisaria receber uma pessoa como parametro, se vc ja tem uma instancia de uma pessoa, vc simplesmente perguntaria a ela se ela é maior de idade.

     public boolean isMaiorDeIdade() {
         if(this.getIdade() &lt;= 18) {
             return false;
         }
         return true;
     }

e no teste:

     public void testIsMaiorDeIdade() {
         Pessoa pessoa = new Pessoa();
         pessoa.setIdade(15);
         assertTrue(pessoa.isMaiorDeIdade());
     }

[]'s

eu seria mais chato e nao queria ver aquele 18 no meio do codigo, sabe como eh, cada pais pode definir a idade que o cara eh maior de idade e tal heheh

sugiro que tu crie no minimo um teste (metodo) que TEM que dar errado e um teste que TEM que dar certo para cada metodo soh pra confirmar, sabe como eh. e criar uma classe de teste para cada classe, mas dependendo do
conteudo das tuas classes soh crie testes para metodos que nao sao 100% garantidos, getter e setter por exemplo eh rara a necessidade de teste para eles, a nao ser que eles tenham alguma regra de negocio. Talvez claro tu jah saiba disso e tenha nocao, mas fica a dica :wink:

my 2pences.