Decepção com JUnit

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

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

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

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

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?

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

Testes servem para garantir o bom funcionamento da interface pública de sua API. Exemplo:

[code]
class MyClass {
private int state = 0;
public int doSomething() {
prepareState();
return state;
}

private void prepareState() {
    state = 1;
}

}[/code]
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.

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

[quote=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[/quote]

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