Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


El Junit para testing mas facil, Diapositivas de Programación Java

Un lenguaje basado en java que hace mas facil el testing

Tipo: Diapositivas

2018/2019

Subido el 03/12/2019

david-santos-bsh
david-santos-bsh 🇪🇸

9 documentos

1 / 28

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Projecte de Programació
Projecte de Programació
JUnit
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c

Vista previa parcial del texto

¡Descarga El Junit para testing mas facil y más Diapositivas en PDF de Programación Java solo en Docsity!

Projecte de Programació

JUnit

Prueba de Programas: Java

Tests Unitarios : JUnit* (https://junit.org/junit4)

JUnit es un framework que permite realizar la ejecución de

clases Java de manera controlada, para poder evaluar si

cada uno de los métodos de la clase se comporta como se

espera

También puede servir para controlar las pruebas de regresión

necesarias cuando parte del código ha sido modificado

Integrado dentro de los IDEs más habituales (NetBeans,

Eclipse, etc.)

*Usaremos JUnit 4.12, aunque ya existe JUnit 5

Prueba de Programas: Java

Suite (o Test Suite ): Grupo de tests. Una test suite es una

manera conveniente de agrupar tests relacionados. Si no se

define ninguna, JUnit crea una por defecto, que incluye todos

los tests que hay en la test class. Usualmente una suite incluye test classes del mismo package

Está en org.junit.TestSuite

Runner (o Test Runner ): El runner es la clase que ejecuta las test suites. JUnit proporciona diversos runners por defecto,

pero también podemos definir propios

Están en org.junit.runners.*

Prueba de Programas: Java

package main.domini; public class Calculator { public double add(double n1,double n2) { return n1 + n2; } public double multiply(double n1, double n2) { return n1 * n2; } public double subtract(double n1, double n2) { return n1 - n2; } public double divide(double n1, double n2) { return n1 / n2; } }

Veamos un ejemplo sencillo. Tenemos una clase para calcular

sumas, restas, productos y divisiones:

Podríamos hacer un test de la siguiente manera...

Prueba de Programas: Java

Prueba de Programas: Java

package test.domini; import src.domini.; import static org.junit.Assert.; import org.junit.Test; public class CalculatorTest { @Test public void add() { Calculator calculator = new Calculator(); double result = calculator.add( 10, 50 ); assertEquals( 40 , result, 0 ); }

... } Si hacemos que falle un test, por ejemplo el add...

Prueba de Programas: Java

En los ejemplos hemos usado org.junit.runner.JUnitCore , pero podríamos usar un TestRunner propio: package test.domini; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunnerPropio { public static void main(String[] args) { Result result = JUnitCore.runClasses(CalculatorTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } if (result.wasSuccessful()) { System.out.println("El test ha ido bien"); } else { System.out.println("El test ha ido mal"); } } }

Prueba de Programas: Java

La ejecución en este caso sería de la siguiente forma:

src $ javac test/domini/CalculatorTest.java

src $ javac test/domini/TestRunnerPropio.java

src $ java test.domini.TestRunnerPropio

El test ha ido bien

src $

Prueba de Programas: Java

Podemos detallar el funcionamiento de algunos asserts:

  • assertEquals(“message”, A, B) Afirma que A y B son iguales utilitzando A.equals(B)
  • assertNotNull(“message”, A) Afirma que el objeto A no es null
  • assertSame(“message”, A, B) Afirma que A y B son el mismo objeto, usando A == B

( aliasing)

  • assertTrue(“message”, A) Afirma que la condición booleana A es true.

Prueba de Programas: Java

La anotación @Test puede tener parámetros opcionales, para poder controlar algunos aspectos de los tests:

  • Si queremos controlar el tiempo que tarda un método en ejecutarse:

@Test(timeout=)

  • Si queremos verificar que el método fallará, generando una excepción de clase SomeException (subclase de Exception).

@Test(expected=SomeException.class)

@Test (expected=IdexOutOfBoundsException.class) public void empty() { new ArrayList().get(0); }

Prueba de Programas: Java

Ya conocemos la anotación @Test, pero para poder configurar el contexto en el que se ejecutan los tests podemos usar otras anotaciones:

  • @Ignore: Método que será ignorado en cada ejecución de la clase de tests

Hay que tener en cuenta que JUnit instanciará la test class antes de

invocar cada test (recordemos, método anotado con @Test). Aún así, los métodos anotados con @BeforeClass y @AfterClass se ejecutarán sólo una vez, antes de la primera instanciación de la clase y cuando acaben todos los tests, respectivamente

Prueba de Programas: Java

package test.domini; import org.junit.*; public class ExempleAnotacions { @BeforeClass public static void beforeClass() { System.out.println("Abans d'instanciar per primer cop la classe"); } @AfterClass public static void afterClass() { System.out.println("Després d'acabar tots els tests"); } @Before public void before() { System.out.println("Abans de test"); } @After public void after() { System.out.println("Després de test"); } @Test public void test1() { System.out.println("--> test 1"); } @Test public void test2() { System.out.println("--> test 2"); } @Ignore @Test public void ignoreTest() { System.out.println("test ignorat"); } } $ java org.junit.runner.JUnitCore test.domini.ExempleAnotacions JUnit version 4. Abans d'instanciar per primer cop la classe .Abans de test --> test 1 Després de test .Abans de test --> test 2 Després de test IDesprés d'acabar tots els tests Time: 0, OK (2 tests)

Prueba de Programas: Java

Lo más razonable es agrupar los tests en función de les clases que estamos probando. Aún así querremos ejecutarlos todos de una vez, sin tener que ir haciendo las diversas pruebas por cada grupo de clases. Para

agrupar tests podemos utilizar las Suites

Definiremos suites utilizando las anotaciones @RunWith y

@SuiteClasses, convenientemente parametrizadas. Por ejemplo, supongamos que tenemos dos tests: import static org.junit.Assert.; import org.junit.Test; public class TestCaseA { @Test public void testA1() { assertEquals("test tonto 1", 1+1, 2); } } import static org.junit.Assert.; import org.junit.Test; public class TestCaseB { @Test public void testB1() { assertTrue("test tonto 2", true); } }

Prueba de Programas: Java

Cada uno de estos tests podría ir a una suite propia, es decir, que

contenga sólo ese test: import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(value = Suite.class) @SuiteClasses(value = { TestCaseA.class }) public class TestSuiteA {} import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(value = Suite.class) @SuiteClasses(value = { TestCaseB.class }) public class TestSuiteB {}

Cada una de estas suites se podría ejecutar independientemente:

$ java org.junit.runner.JUnitCore TestSuiteA (o TestSuiteB) JUnit version 4. . Time: 0, OK (1 test)

Fijémonos que las clases TestSuiteA y TestSuiteB están vacías