Este documento apresenta exemplos de testes unitários automatizados com JUnit e NUnit para validar uma classe de cálculo matemático. São mostrados testes para métodos positivos e negativos, assim como para exceções. Explica-se a estrutura básica de classes de teste com métodos como setup, teardown e asserts para validar resultados esperados.
Multi-core Parallelization in Clojure - a Case Study
Introdução a testes unitários automatizados com JUnit e NUnit
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.
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. 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
7. Analisar a cobertura dos testes Instrução não testada Construtor por defeito não testado ??? 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); } } 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. 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)