TQS -  Teste e Qualidade de Software ( Software Testing and Quality ) Introdução a  testes unitários automatizados com JUn...
JUnit <ul><li>Framework open source  para criação e execução de testes unitários, baseado na arquitectura xUnit (inciada c...
Exemplo de classe a testar class MyMath  { //   Dá o  maior divisor comum positivo de  2  inteiros   // não nulos pelo alg...
Exemplo de classe de teste em JUnit 3.8.1 import junit.framework.TestCase; class MyMathTest extends  TestCase  { public vo...
Executar e ver o teste a  falhar …
Corrigir e ver o teste a passar
Analisar a cobertura dos testes Instrução não testada Construtor por defeito não testado ??? Testar antes mdc(-4,-6)
Exemplo em JUnit 4.0  import org.junit.Test; import static org.junit.Assert.assertEquals; class MyMathTest { @Test public ...
Exemplo em NUnit  using System; using NUnit.Framework; [TestFixture] class MyMathTest { [Test]  public void TestMdcPositiv...
Exemplo de execução com NUnit-Gui
Setup  e  teardown <ul><li>Código de iniciação e terminação a executar … </li></ul><ul><li>…  antes e depois de cada métod...
Test suites <ul><li>Agregam conjuntos de testes </li></ul><ul><li>Padrão composite (JUnit 3.8.1) </li></ul><ul><ul><li>Tes...
Exercício <ul><li>Realizar o exemplo do mdc </li></ul>
Referências e informação adicional <ul><li>www.junit.org </li></ul><ul><li>www.nunit.org   </li></ul><ul><li>http://testdr...
Upcoming SlideShare
Loading in...5
×

Introdução a testes unitários automatizados com JUnit e NUnit

3,209
-1

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,209
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
119
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introdução a testes unitários automatizados com JUnit e NUnit

  1. 1. 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 [email_address] www.fe.up.pt / ~jpf
  2. 2. JUnit <ul><li>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 </li></ul><ul><li>Permite criar classes de teste ( test fixtures ) com métodos de teste com asserções </li></ul><ul><ul><li>Classe é instanciada de novo para cada método de teste </li></ul></ul><ul><li>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) </li></ul><ul><ul><li>“ Keep the bar green to keep the code clean” [Kent Beck] </li></ul></ul><ul><li>Conjuntos de testes podem ser organizados em test suites </li></ul><ul><li>Actualmente integrado no Eclipse </li></ul><ul><li>Ver mais detalhes em www.junit.org </li></ul>
  3. 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; } } Como não é dito nada em contrário, deve funcionar com inteiros negativos … Não parece que esteja implementado… especificação informal implementação
  4. 4. Exemplo de classe de teste em JUnit 3.8.1 import junit.framework.TestCase; class MyMathTest extends TestCase { public void test MdcPositive() { assertEquals (1, MyMath.mdc(2, 3)); assertEquals (2, MyMath.mdc(2, 4)); } public void test MdcNegative() { assertEquals (2, MyMath.mdc(-4, 6)); } public void test MdcZero() { 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 3.8.1 test
  5. 5. Executar e ver o teste a falhar …
  6. 6. Corrigir e ver o teste a passar
  7. 7. Analisar a cobertura dos testes Instrução não testada Construtor por defeito não testado ??? Testar antes mdc(-4,-6)
  8. 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); } } Tira partido das novas features do Java 1.5, mas (ainda) não é entendido pela ferramenta Coverlipse de análise de cobertura dos testes! Anotação dos métodos de teste Método estático da classe Assert Importação de método estático
  9. 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. 10. Exemplo de execução com NUnit-Gui
  11. 11. Setup e teardown <ul><li>Código de iniciação e terminação a executar … </li></ul><ul><li>… antes e depois de cada método de teste dentro duma classe de teste </li></ul><ul><ul><li>Por exemplo, inicializar objectos (variáveis privadas da classe) a usar por vários métodos de teste </li></ul></ul><ul><ul><li>JUnit 3.8.1: redefinir métodos setUp e tearDown herdados de TestCase </li></ul></ul><ul><ul><li>NUnit: criar métodos e anotá-los com atributos SetUp e TearDown </li></ul></ul><ul><li>… . uma única vez numa classe de teste (antes e depois de todos os métodos) </li></ul><ul><ul><li>Exemplo: abrir e fechar uma conexão para a base de dados </li></ul></ul><ul><ul><li>NUnit: métodos anotados c/ atributos TestFixtureSetup e TestFixtureTearDown </li></ul></ul>
  12. 12. Test suites <ul><li>Agregam conjuntos de testes </li></ul><ul><li>Padrão composite (JUnit 3.8.1) </li></ul><ul><ul><li>Test generaliza TestCase e TestSuite </li></ul></ul><ul><ul><li>TestSuite agrega instâncias de Test (método addTest(Test t)) </li></ul></ul><ul><li>Normalmente não é necessário criar explicitamente, pois os casos de teste são descobertos automaticamente graças ao mecanismo de reflexão </li></ul>
  13. 13. Exercício <ul><li>Realizar o exemplo do mdc </li></ul>
  14. 14. Referências e informação adicional <ul><li>www.junit.org </li></ul><ul><li>www.nunit.org </li></ul><ul><li>http://testdriven.net/ </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×