Desenvolvimento de software e tecnologia em geral
Testes unitários com TestNG
Irei fazer uma breve introdução ao framework de testes baseado no JUnit, o framework TestNG.
Já o utilizei em alguns projetos e algumas funcionalidades que gosto nele são:
- Suporte a anotações.
- Suporte para prover dados aos testes (@DataProvider).
- Suporte a dependência (dependsOnMethods, dependsOnGroups) e agrupamento (groups) de métodos e/ou grupos de métodos.
- Suporte a parâmetros (parameters).
No próprio site do framework existem plugins para Eclipse, Netbeans e IDEA IntelliJ.
Agora mostrarei um pequeno exemplo de um teste unitário utilizando o TestNG:
package br.com.rodrigolazoti.testes;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class MeuTeste {
@BeforeClass(
description = "Este método será invocado quando este teste é instanciado")
public void configurar() {
}
@Test(dataProvider = "dados",
description = "Testa se o valor informado como parâmetro é nulo")
public void testaValorNulo(Integer valor) {
Assert.assertNotNull(valor, "Valor informado é nulo!");
}
@Test(dataProvider = "dados", dependsOnMethods = { "testaValorNulo" },
description = "Teste se o valor informado como parâmetro é positivo")
public void testaNumeroPositivo(Integer valor) {
Assert.assertTrue(valor >= 0, "O valor é negativo!");
}
/**
*
* Provê dados para os testes serem realizados.
*
* @return Retorna um array multidimensional.
*
*/
@DataProvider(name = "dados")
public Object[][] gerarDados() {
return new Object[][] { { -10 }, { 0 }, { 10 }, { null } };
}
}
Related posts:
| Imprimir artigo | Este artigo foi escrito por Rodrigo Lazoti em 07/05/2008 às 12:28, e está arquivado em Java, Programação, Testes Unitários. Siga quaisquer respostas a este artigo através do RSS 2.0. Você pode deixar uma resposta ou fazer um trackback do seu próprio site. |
há 1 ano atrás
Haw!
Você já trabalhou com testes interdependentes? Exemplo: tenho TipoProduto e Produto, pra testar Produto preciso que o teste de inclusão de TipoProduto tenha sido realizado com sucesso, pois Produto precisa de TipoProduto. Porém não quero apenas informar as duas classes senão serão rodados todos os testes de TipoProduto (nessa situação hipotética tudo bem, mas numa situação real vou ter muita coisa e mutas dependências que não faz sentido ficar rodando).
Uma das formas que observei para fazer isso (rodar somente o necessário) é configurando o testng.xml para rodar somente alguns grupos, mais ou menos isso:
Porém não gosto nem um pouco de ficar informando, no teste de Produto por exemplo, que devem ser rodados os testes (grupos na verdade) TipoProduto.setUp (esse na verdade é um @BeforeClass), TipoProduto.limpar e depois TipoProduto.incluir, ao invés de ter de informar apenas TipoProduto.incluir.
Ao meu ver, eu não deveria precisar saber que o TipoProduto.incluir do qual dependo, depende de TipoProduto.limpar e que também existe um TipoProduto.setUp que deve ser rodado antes de tudo (é um BeforeClass).
Conclusão da situação: ou eu conheço e fico informando todos os grupos dos grupos dos quais dependo devem rodar ou deixo rodar todos.
Valewz!
há 1 ano atrás
Oops. coloquei um pre class=java no comentário anterior mais não apareceu, então colei aqui: http://pastie.org/331772
valewz!
há 1 ano atrás
*mas não apareceu