A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Jpf@fe.up.pt www.fe.up.pt/~jpf TQS - Teste e Qualidade de Software (Software Testing and Quality) Introdução a testes unitários automatizados com JUnit.

Apresentações semelhantes


Apresentação em tema: "Jpf@fe.up.pt www.fe.up.pt/~jpf TQS - Teste e Qualidade de Software (Software Testing and Quality) Introdução a testes unitários automatizados com JUnit."— Transcrição da apresentação:

1 jpf@fe.up.pt www.fe.up.pt/~jpf
TQS - Teste e Qualidade de Software (Software Testing and Quality) Introdução a testes unitários automatizados com JUnit e NUnit João Pascoal Faria

2 JUnit Framework open source para criação e execução de testes unitários, baseado na arquitectura xUnit (inciada com SmallTalk), escrito inicialmente por Kent Beck e Erich Gamma Permite criar classes de teste (test fixtures) com métodos de teste com asserções Classe é instanciada de novo para cada método de teste Test runner (c/ interface textual ou gráfica) executa métodos de teste e mostra os que passaram (a verde) e os que falharam (a vermelho) “Keep the bar green to keep the code clean” [Kent Beck] Conjuntos de testes podem ser organizados em test suites Actualmente integrado no Eclipse Ver mais detalhes em

3 Exemplo de classe a testar
class MyMath { // Dá o maior divisor comum positivo de 2 inteiros // não nulos pelo algoritmo de Euclides. // Se algum argumento for 0 dá // IllegalArgumentException. public static int mdc(int a, int b) { while (b > 0) { int aux = a % b; a = b; b = aux; } return a; especificação informal Como não é dito nada em contrário, deve funcionar com inteiros negativos … implementação Não parece que esteja implementado…

4 Exemplo de classe de teste em JUnit 3.8.1
import junit.framework.TestCase; class MyMathTest extends TestCase { public void testMdcPositive() { assertEquals(1, MyMath.mdc(2, 3)); assertEquals(2, MyMath.mdc(2, 4)); } public void testMdcNegative() { assertEquals(2, MyMath.mdc(-4, 6)); public void testMdcZero() { try { MyMath.mdc(0,1); fail(); } catch(IllegalArgumentException e){} Métodos de teste: void testXXX() Métodos herdados de TestCase: assertEquals( esperado, actual) fail() - assinala teste falhado No Eclipse: New   JUnit Test Case  JUnit test

5 Executar e ver o teste a falhar …

6 Corrigir e ver o teste a passar

7 Analisar a cobertura dos testes
Construtor por defeito não testado Instrução não testada ??? Testar antes mdc(-4,-6)

8 Exemplo em JUnit 4.0 import org.junit.Test;
import static org.junit.Assert.assertEquals; class MyMathTest { @Test public void testMdcPositive() { assertEquals(1, MyMath.mdc(2, 3)); assertEquals(2, MyMath.mdc(4, 6)); } @Test(expected=IllegalArgumentException.class) public void testMdcZero() { MyMath.mdc(0,1); Importação de método estático Anotação dos métodos de teste Método estático da classe Assert Tira partido das novas features do Java 1.5, mas (ainda) não é entendido pela ferramenta Coverlipse de análise de cobertura dos testes!

9 Exemplo em NUnit using System; using NUnit.Framework; [TestFixture]
class MyMathTest { [Test] public void TestMdcPositive() { Assert.AreEqual(1, MyMath.mdc(2, 3)); Assert.AreEqual(2, MyMath.mdc(4, 6)); } [Test, ExpectedException(typeof(ArgumentException))] public void TestMdcZero() { MyMath.mdc(0,1); Adicionar ao projecto referência para nunit.framework.dll Executar com NUnit-Gui (nunit-gui.exe) e abrir assembly do projecto (.dll ou .exe)

10 Exemplo de execução com NUnit-Gui

11 Setup e teardown Código de iniciação e terminação a executar …
… antes e depois de cada método de teste dentro duma classe de teste Por exemplo, inicializar objectos (variáveis privadas da classe) a usar por vários métodos de teste JUnit 3.8.1: redefinir métodos setUp e tearDown herdados de TestCase NUnit: criar métodos e anotá-los com atributos SetUp e TearDown …. uma única vez numa classe de teste (antes e depois de todos os métodos) Exemplo: abrir e fechar uma conexão para a base de dados NUnit: métodos anotados c/ atributos TestFixtureSetup e TestFixtureTearDown

12 Test suites Agregam conjuntos de testes Padrão composite (JUnit 3.8.1)
Test generaliza TestCase e TestSuite TestSuite agrega instâncias de Test (método addTest(Test t)) Normalmente não é necessário criar explicitamente, pois os casos de teste são descobertos automaticamente graças ao mecanismo de reflexão

13 Exercício Realizar o exemplo do mdc

14 Referências e informação adicional


Carregar ppt "Jpf@fe.up.pt www.fe.up.pt/~jpf TQS - Teste e Qualidade de Software (Software Testing and Quality) Introdução a testes unitários automatizados com JUnit."

Apresentações semelhantes


Anúncios Google