Anda di halaman 1dari 24

JUnit

Um Framework Para Testes de Unidade

PUC Minas So Gabriel


Teste e Manuteno de Software

Motivao
Todos os programadores sabem que devem testar
seu cdigo
Quanto mais curto o prazo menos testes so
realizados
Necessidade de testar cada mtodo separadamente
Centralizar o cdigo de testes
Regras j definidas para apresentao de erros
Possibilidade de automatizao

Testes em Software
Revelam erros no cdigo
Garantem que a implementao respeita a
especificao
Devem ser automatizados a fim de serem
facilmente executados sempre que necessrio
Garantem a qualidade do software durante todo o
ciclo de vida

Testes Automatizados
Avaliam se um programa funciona como
esperado
Exemplo: main()
Validam os requisitos

Testes de Unidade
Verificar a funcionalidade de partes do
sistema.
Boas prticas para testes:
Evitar redundncia;
Permitir que todos os possveis caminhos
sejam cobertos com vrios testes;
Encontrar erros ainda no descobertos.

Testes de Unidade
Testam a aplicao em seus menores
componentes, isoladamente
Testam unidades lgicas
Mtodos
Objetos

Maior nmero de erros detectados


Erros mais fceis de corrigir
Devem ser executados continuamente

Testes de Integrao
Testam como uma coleo de unidades
interage entre si ou com o ambiente onde
executam
Executados continuamente (caso as unidades
em desenvolvimento dependam de outras)

Testes Funcionais
Ponto de vista do usurio
Testam casos de uso
Validam a interface com o usurio, as
operaes requisitadas, etc.
So menos estveis do que os outros tipos

XUnit
Prov estrutura de testes de unidade.
Conceito de testes automatizados.
Exemplos:
SUnit: SmallTalk;
CPPUnit: C++;
PHPUnit: PHP;
JsUnit: Java Script;
JUnit: Java.

JUnit
Framework para facilitar o desenvolvimento e
a execuo de testes de unidade em programas
Java
Modelo de programao para a criao de
testes de unidade
Sugerido por Kent Beck

JUnit
API para construir testes
junit.framework.*

Aplicaes para executar testes


TestRunner

JUnit
O framework JUnit pode ser resumido em uma
classe pai para todos os casos de teste
(chamada TestCase) que fornece ferramentas
para rodar testes, gerar relatrios e definir
conjuntos de testes

Escrevendo uma classe de teste


Assuma uma classe Conta
Para testar a classe definimos uma classe
ContaTest
import test.framework.TestCase;

TestCase
assertEquals()
assertNotNull()
assertNull()
fail()
setUp()
tearDown()
run()

public class ContaTest extends TestCase {


public ContaTest(String testCase) {
super(testCase);
}
}

ContaTest

Escrevendo uma classe de teste


Para testar o mtodo creditar(double valor) definimos o
mtodo testCreditar() na classe ContaTest;
public void testCreditar() {
Conta c = new Conta(1, 100);
c.creditar(50.0);
assertTrue(c.getSaldo() == 150);
}

Para cada mtodo da classe Conta definido um


mtodo na classe ContaTest

Principais Asseres
assertEquals(objEsperado, objRecebido);
assertTrue(expBooleana);
assertNull(obj);
assertNotNull(obj)
assertSame(obj1, obj2);
fail(mensagem);

Funcionamento
O TestRunner recebe uma subclasse de
junit.framework.TestCase e executa o mtodo
run(Test)
Obtm dados de TestSuite - suite()
TestSuite usa Java Reflection para descobrir os
mtodos de teste

Funcionamento
public static Test suite(){
return new TestSuite(ContaTest.class);
}
public static void main(String[] args){
junit.textui.TestRunner.run(suite());
}

Suite de Testes
Quando se fala em teste automatizado, comum
a execuo de um conjunto de testes de uma
nica vez;
Suites de testes representam um conjunto de
testes que sero executados seqencialmente;
JUnit define a classe TestSuite que:
Permite incluir todos os mtodos de teste de uma
classe em um suite de teste;
Permite definir uma classe que inclui todos os suites
de teste das classes do sistema.

TestSuite
Composio de testes
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new ContaTest("testGetSaldo"));
suite.addTest(new ContaTest("testCreditar"));
return suite;
}

Um TestSuite usado pelo TestRunner para


saber quais mtodos devem ser executados
como testes

TestSuite
Para executar mais de um teste de uma vez
e/ou reusar testes de outras classes (testes
regressivos)
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new ContaTest("testSaldoConta"));
suite.addTest(new ContaTest("testCredito"));
suite.addTest(PoupancaTest.suite());
return suite;
}

Como funciona
As asseres causam falhas quando os
resultados no estiverem corretos
test.framework.AssertionFailedError

Cada instncia de TestCase ser utilizada para


executar um dos mtodos de teste
As alteraes que ele fizer ao estado do objeto no
afetaro as demais classes

Boas Prticas
Escreva o cdigo de testes antes da
implementao. Dessa forma, voc ter uma
implementao dirigida por contrato
Teste somente mtodos que podem estar
quebrados (assim, mtodos get e set no
devem ser testados na maioria dos casos)
Teste sempre que possvel

Testes conduzem o projeto OO


1. Decida o que o componente deve fazer.
2. Projeto o componente (sua interface pblica)
3. Escreva os testes de unidade
4. Escreva o componente at que todos os testes
passem
5. Escreva teste para outras possibilidade de falha
6. Escreva testes antes de corrigir um bug
7. Execute todos os testes antes de publicar uma
alterao (regresso)

Referncias
http://www.junit.org