Teste unitário... duvida curiosa

Olá,

public class ExitAction extends AbstractAction implements Action { public void actionPerformed(ActionEvent evt) { System.exit(1); } }

Como ficaria um teste unitário desse código?

Que tal assim:

public class ExitActionTest extends TestCase { private ExitAction exitAction = new ExitAction(); public void testActionPerformed() { exitAction.actionPerformed(null); fail("Não saiu do programa =D"); } }
Funciona, mas, pelo menos na interface do eclipse, ele simplesmente ignora o teste… roda, e não falha, mas não aparece como se houvesse sucesso.

Vc tem certeza que uma classe assim precisa de testes? :slight_smile:

Não. Mas e se o contrato exigir (http://jroller.com/page/obie?entry=serious_about_agile) ?

mas pra q servem esse testes unitários? :?

Para garantir que a sua classe funciona:

http://www.guj.com.br/java.tutorial.artigo.40.1.guj

O contrato exige que ao menos 90% do código seja testado, há exceções como este caso que você apresentou que entram nos 10% não testado.

Este teste que você apresentou não é bom porque ele interrompe a execução e os testes seguintes não serão executados. Se você conseguir forçar este teste para ser o último a ser executado você estará criando uma dependencia na ordem em que os testes são executados o que é muito ruim já que vai contra o próprio conceito de teste unitário.

Bom senso… o desenvolvimento de sistemas se resume a bom senso…
O risco da tal action dar problema é pequeno, digo ainda que é um código onde o teste é mais importante na tela do que na classe de teste.

vc nao precisa chamar System.exit(). Alias, chamar essa funcao eh tipo dizer “eu nao sei como sair desse programa de forma decente, vou abandonar tudo e a JVM se vira!”

ha ha ha ha ha

Tu pode criar um mock para essa classe…

http://www.easymock.org/

Se o metodo for chamado, tu pressume que vai funcionar!!