Plano de teste
JUnit
O que é e para que serve? framework para desenvolvimento e execução de testes de unidade em programas Java.
JUnit só serve para Java? JUnit faz parte da família de ferramentas de testes xUnit, que inclui implementações do framework para SmallTalk, C++ e outras linguagens. EDUARDO OLIVEIRA SPÍNOLA (http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=4637) JUnit foi adaptado à outras linguagens, tais como C#(NUnit), Python, Fortran, e C++. (http://pt.wikipedia.org/wiki/JUnit)
Onde Encontrar? http://junit.org/ O Eclipse já vem com o JUnit.
Como configurar? Adicionar o junit.jar ao projeto No Eclipse Project > Properties > Java Build Path > Libraries > Add Library > JUnit
Como Implementar? Classes de Teste devem herdar de TestCase. import junit.framework.TestCase; Métodos de teste devem começar com o prefixo “test” public void setUp() {...} public void testxxx() {...} public void tearDown() {...}
Pergunta? Todos as classes de teste devem herdar de TestCase? Todos os métodos devem ter em seu nome o prefixo “test”?
Nova Implementação A partir do JUnit 4 pode-se escolher não utilizar herança da classe TestCase e o prefixo “test” dos métodos.
@Test •Os casos de teste agora são marcados com as anotações @Test. •Você não precisa mais colocar o prefixo “test” nos métodos. •Além disso, sua classe não precisa herdar de “TestCase”.
@Test public void somar() { assertEquals(12, simpleMath @Test public void somar() { assertEquals(12, simpleMath.add(7, 5)); } public void subtrair() { assertEquals(9, simpleMath.substract(12, 3));
@Before e @After • Use as anotações @Before e @After para os métodos “setup” e “tearDown” respectivamente. Eles irão rodar antes e depois de cada caso de teste. • É possível ter quantos métodos @Before e @After quiser.
@Before public void executeAntesCadaTeste() { simpleMath = new SimpleMath(); } @After public void executeDepoisCadaTeste() { simpleMath = null;
Exception Handling • Use o parâmetro “expected” com a anotação @Test para todos os casos de teste onde são esperadas exceções. Escreva o noma da classe da exceção que será lançada (throws).
@Test(expected = ArithmeticException @Test(expected = ArithmeticException.class) public void divisionWithException() { // divisão por zero simpleMath.divide(1, 0); }
Teste de Tempo Teste falha se demorar mais do que timeout Útil para testes de redes e conexões com bancos de Dados Aplicações modernas existem tempo de resposta máximo. Testes de tempo garantem que o tempo de resposta máximo seja satisfeito, mesmo que o sistema se torne mais complexo
@Test(timeout=500) public void buscaTodasAsNovelas(){ novelas @Test(timeout=500) public void buscaTodasAsNovelas(){ novelas.buscaTodas(); }
Asserções Método Descrição Teste passa se assertEquals(a, b) Compara dois valores a.equals(b) assertFalse(a) Avalia uma expressão booleana a == false assertTrue(a) a == true assertNotNull(a) Compara uma variável com nulo a != null assertNull(a) a == null assertNotSame(a, b) Compara dois objetos a == b assertSame(a, b) a != b fail() Causa uma falha no teste atual Não passa
Imports import org.junit.Test; import static org.junit.Assert.*;
Método suite public static TestSuite suite() { //JUnit 3 public static TestSuite suite() { return new TestSuite(SuaClasseTest.class); } //JUnit 4 public static junit.framework.Test suite() { return new JUnit4TestAdapter(SuaClasseTest.class);
TestSuite import junit.framework.Test; import junit.framework.TestSuite; public class TesteGeral { public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest(SuaClasseTeste.suite()); return suite; }
TestRunner Aplicação em modo texto ou gráfico para execução de testes
Resultado dos Testes SUCESSO FALHA ERRO
Casos de Teste
Implementação dos Casos de Teste no JUnit
Hoje em dia é muito comum a preocupação de muitos desenvolvedores com qualidade de software e com testes automatizados. E para melhorar a qualidade de um software existem várias ferramentas livre que auxiliam em diversas áreas, como métricas, cobertura de código, testes funcionais, analise de possíveis bugs (findBugs, PMD) e etc... E com tantos testes como você sabe o que foi testado no sistema? Será que você não esta testando mais de uma vez a mesma coisa? Quanto do código está coberto por um teste unitário e quanto do código não está?
Visão Geral
O EclEmma é um plugin para o Eclipse que mede e apresenta a cobertura de testes no próprio Eclipse. Os testes são executados no próprio Eclipse e a apresentação dos trechos cobertos e descobertos é integrada ao editor Java.
Baseado no EMMA, outra ferramenta de cobertura de código Java, tentando adotar a filosofia de Emma para a workbench do Eclipse: Rápido ciclo de desenvolvimento/teste: Inicia a partir do workbench, como execuções de teste JUnit podem ser analisados diretamente com essa cobertura de código. Análise de cobertura: Na cobertura, os resultados são imediatamente resumidos e destacados nos editores de código fonte Java. Não-invasivos: EclEmma não requer modificar seus projetos ou realizar qualquer outra configuração.
Caracteristicas Launching Analysis Import Export
EclEmma acrescenta um modo de lançar chamada para o workbench do Eclipse. Ele é chamado de modo de Cobertura (Coverage mode) e funciona exatamente como os modos “Run” e “Debug”. A modalidade de lançamento de cobertura pode ser ativada a partir do menu Executar ou utilizando a barra no workbench:
Basta acessar suas aplicações ou testes de unidade no modo de Cobertura para coletar informações de cobertura. Atualmente, os tipos de lançamento a seguir são suportados: Aplicação Java Eclipse / RCP Aplication Equinox OSGi Framework Junit Test Test TestNG plug-in Junit test JUnit RAP test SWTBot Test
Analysis Após a análise de sua aplicação ou teste de unidade foi finalizado informações cobertura de código é automaticamente disponível no workbench do Eclipse: Resumo da Cobertura: A visão Cobertura(Coverage view) listas resumos da cobertura para seus projetos de Java, que permite drill-down para o nível de método.
Analysis Fonte highlighting: O resultado de um teste com o Eclmma é diretamente visível nos editores fonte Java. Um código de cores totalmente personalizáveis destaca, em parte, e não linhas cobertas. Analysis
Analysis Recursos Adicionais nos testes com o EclEmma: Selecione instruções, linhas de código ou blocos, métodos rapidamente Várias sessões de cobertura: É possível alternar entre os dados de cobertura de várias sessões. Mesclar Sessões: Se vários trexos de código em diferentes lugares devem ser considerados para a cobertura de sessões de análise, eles podem ser facilmente fundidos.
Import/Export Enquanto EclEmma concebido essencialmente para a execução de teste e análise dentro da workbench do Eclipse, ele fornece alguns importação / exportação características. Cobertura de importação de dados: Um assistente permite importar arquivos *. CE lança cobertura de dados externas. Exportar relatório Cobertura: dados de cobertura pode ser exportado como um arquivo *. CE ou no formato XML ou HTML.
Instalação
http://www.eclemma.org/index.html http://tinyurl.com/ygut9v4 http://www.oncast.com.br/blog/?p=23 http://www.eclemma.org/index.html http://tinyurl.com/ygut9v4