Decepção com JUnit

7 respostas
marcioa1

Olá,

Tive agora um decepção com JUnit. Queria testar um método privado mas ele exigia que o mesmo fosse público. Não tem porque o método ser público, a não ser para satisfazer o JUnit. É assim mesmo ?

Márcio

7 Respostas

T

http://junit.sourceforge.net/doc/faq/faq.htm#tests_11

_fs

O que você deveria testar é o método público que usa este método privado.

marcioa1

Lipe,

Meu método privado constrói uma String de conexão SQL. Eu quero testar se a string contruida estava correta, e não se o método que executa a string ( este método é público ) está correto.

Obrigado,

Márcio

1112

Você tem certeza de que precisa de um teste unitário para ver isso?

O método de construção da String de conexão SQL será sujeito a mudanças constantes? Ele precisará ser testado a cada mudança para homologar a mudança?

_fs

Então basta testar o método que executa a string :D
http://www.artima.com/suiterunner/private2.html

Testes servem para garantir o bom funcionamento da interface pública de sua API. Exemplo:
class MyClass {
    private int state = 0;
    public int doSomething() {
        prepareState();
        return state;
    }

    private void prepareState() {
        state = 1;
    }
}
Não deveria interessar para quem está usando a API (no caso o test case) como que doSomething() faz o trabalho, desde que o trabalho seja feito como esperado. Se desejar pode mudar o prepareState() como quiser, ou até mesmo omitir a chamada ao mesmo. O que deve continuar funcionando como esperado é o método público doSomething(), justamente por ser público e, portanto, possuir outras classes que dependem do mesmo.

Ao testar um método privado utilizando alguma gambiarra comp reflection, no fundo tudo o que está fazendo é tornando o método público, e agora deve garantir que sempre funcione da mesma maneira, pois há classes que dependem dele, no seu caso um test case.

A única boa razão que consigo pensar para testar métodos privados é ao trabalhar com código de terceiros.

marcioa1

Wilerson e Lipe,

Talvez eu esteja tesetando um método que não precise ser testado. Uma vez pronto, ele não irá sofrer alterações. Talvez eu devesse testá-lo fora do JUnit.

Obrigado a vocês,

Márcio

Beren

marcioa1:
Wilerson e Lipe,

Talvez eu esteja tesetando um método que não precise ser testado. Uma vez pronto, ele não irá sofrer alterações. Talvez eu devesse testá-lo fora do JUnit.

Obrigado a vocês,

Márcio

Quando for testar o metodo (jah que vao ser raras as vezes) muda o modificador dele na hora do teste… :wink:

Criado 9 de maio de 2006
Ultima resposta 12 de mai. de 2006
Respostas 7
Participantes 5