JUnit - Prueba parametrizada

JUnit 4 ha introducido una nueva función llamada parameterized tests. Las pruebas parametrizadas permiten a un desarrollador ejecutar la misma prueba una y otra vez utilizando diferentes valores. Hay cinco pasos que debe seguir para crear una prueba parametrizada.

  • Anote la clase de prueba con @RunWith (Parameterized.class).

  • Cree un método estático público anotado con @Parameters que devuelva una colección de objetos (como matriz) como conjunto de datos de prueba.

  • Cree un constructor público que tome lo que es equivalente a una "fila" de datos de prueba.

  • Cree una variable de instancia para cada "columna" de datos de prueba.

  • Cree su (s) caso (s) de prueba utilizando las variables de instancia como fuente de los datos de prueba.

El caso de prueba se invocará una vez para cada fila de datos. Veamos las pruebas parametrizadas en acción.

Crear una clase

Cree una clase de Java para probar, digamos, PrimeNumberChecker.java en C: \> JUNIT_WORKSPACE.

public class PrimeNumberChecker {
   public Boolean validate(final Integer primeNumber) {
      for (int i = 2; i < (primeNumber / 2); i++) {
         if (primeNumber % i == 0) {
            return false;
         }
      }
      return true;
   }
}

Crear clase de caso de prueba parametrizada

Cree una clase de prueba de Java, digamos, PrimeNumberCheckerTest.java. Cree un archivo de clase java llamadoPrimeNumberCheckerTest.java en C: \> JUNIT_WORKSPACE.

import java.util.Arrays;
import java.util.Collection;
 
import org.junit.Test;
import org.junit.Before;

import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;

@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
   private Integer inputNumber;
   private Boolean expectedResult;
   private PrimeNumberChecker primeNumberChecker;

   @Before
   public void initialize() {
      primeNumberChecker = new PrimeNumberChecker();
   }

   // Each parameter should be placed as an argument here
   // Every time runner triggers, it will pass the arguments
   // from parameters we defined in primeNumbers() method
	
   public PrimeNumberCheckerTest(Integer inputNumber, Boolean expectedResult) {
      this.inputNumber = inputNumber;
      this.expectedResult = expectedResult;
   }

   @Parameterized.Parameters
   public static Collection primeNumbers() {
      return Arrays.asList(new Object[][] {
         { 2, true },
         { 6, false },
         { 19, true },
         { 22, false },
         { 23, true }
      });
   }

   // This test will run 4 times since we have 5 parameters defined
   @Test
   public void testPrimeNumberChecker() {
      System.out.println("Parameterized Number is : " + inputNumber);
      assertEquals(expectedResult, 
      primeNumberChecker.validate(inputNumber));
   }
}

Crear clase de corredor de pruebas

Cree un archivo de clase java llamado TestRunner.java en C: \> JUNIT_WORKSPACE para ejecutar caso (s) de prueba.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(PrimeNumberCheckerTest.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compile las clases PrimeNumberChecker, PrimeNumberCheckerTest y Test Runner usando javac.

C:\JUNIT_WORKSPACE>javac PrimeNumberChecker.java PrimeNumberCheckerTest.java
TestRunner.java

Ahora ejecute Test Runner, que ejecutará los casos de prueba definidos en la clase Test Case proporcionada.

C:\JUNIT_WORKSPACE>java TestRunner

Verifique la salida.

Parameterized Number is : 2
Parameterized Number is : 6
Parameterized Number is : 19
Parameterized Number is : 22
Parameterized Number is : 23
true