Prueba parametrizada con dos argumentos en JUnit 5 jupiter

1 minuto de lectura

¿Cómo puedo escribir una prueba parametrizada con dos argumentos en JUnit 5 jupiter? Lo siguiente no funciona (error de compilación):

@ParameterizedTest
@ValueSource(strings = { "a", "b", "foo" })
@ValueSource(ints = { 1, 2, 3 })
public void test(String arg1, int arg2) {...}

Aquí hay dos posibilidades para lograr estas llamadas de método de prueba de múltiples argumentos.

La primera (parámetros de prueba) utiliza un FuenteCsv a la que proporciona una lista separada por comas (el delimitador es configurable) y la conversión de tipos se realiza automáticamente según los parámetros de su método de prueba.

El segundo (testParametersFromMethod) utiliza un método (proporcionar parámetros) para proporcionar los datos necesarios.

@ParameterizedTest
@CsvSource({"a,1", "b,2", "foo,3"})
public void testParameters(String name, int value) {
    System.out.println("csv data " + name + " value " + value);
}

@ParameterizedTest
@MethodSource("provideParameters")
public void testParametersFromMethod(String name, int value) {
    System.out.println("method data " + name + " value " + value);
}

private static Stream<Arguments> provideParameters() {
    return Stream.of(
            Arguments.of("a", 1),
            Arguments.of("b", 2),
            Arguments.of("foo", 3)
    );
}

Los resultados de estos métodos de prueba son:

Running ParameterTest
csv data a value 1
csv data b value 2
csv data foo value 3
method data a value 1
method data b value 2
method data foo value 3

  • Muchas gracias. ¿Hay alguna manera de probar el producto cruzado (“a,1″,”a,2″,”a,3″,”b,1″,”b,2”,…) sin escribir todas las combinaciones?

    – ruediste

    28 de abril de 2020 a las 16:16

  • Para esto, el enfoque del método hará el trabajo. En provideParameters puede crear todas las combinaciones que desee.

    – wumpz

    29 de abril de 2020 a las 5:33


  • @ruediste Ya hay un problema al respecto: github.com/junit-team/junit5/issues/1427.

    – eeee

    3 de mayo de 2020 a las 9:41

¿Ha sido útil esta solución?