Junit 5 – ¿Cómo pasar varios valores nulos para @MethodSource?
Muy similar a cómo pasar múltiples valores nulos para CSVSource
Estoy modificando un método de prueba de parámetro único a múltiple:
@ParameterizedTest
@NullAndEmptySource
@MethodSource("generateData")
void testSomeMethod(String x, List<string> list) {
doSomethingwith(x);
doAnotherThingWith(list);
}
private static Stream<arguments> generateData() {
return Stream.of(
Arguments.of("a", Arrays.asList("1","2","3")),
Arguments.of("b", Arrays.asList("1","2","3")),
Arguments.of("foo", Arrays.asList("1","2","3"))
);
}
La prueba de caso nulo y vacío agregada con esta anotación @NullAndEmptySource
falló con una ParameterResolutionException: No hay un parámetro registrado para el parámetro [java.util.List<java.lang.String> arg1 en el método [public void my.pachage.myclass.testSomeMethod]
¿Alguien podría guiarme para pasar el caso de prueba? No tengo idea si los parámetros coinciden porque hay dos parámetros en el método y no entiendo qué significa el mensaje de error.
davy.ai
El mensaje de error indica que JUnit 5 no puede encontrar un resolvedor de argumento adecuado para el segundo parámetro del método
testSomeMethod()
, el cual es de tipoList<string>
. Esto se debe a que JUnit 5 no brinda soporte incorporado para parámetros de tipoList
en las Pruebas Parametrizadas.Para solucionar este problema, puedes escribir un resolvedor de argumento personalizado que pueda convertir una
String
separada por comas en unaList<string>
. Aquí tienes un ejemplo de implementación:Luego, puedes registrar este resolvedor de argumento en tu clase de prueba anotando la clase con
@ExtendWith(StringToListArgumentResolver.class)
:Con esta configuración, el resolvedor de argumento
StringToListArgumentResolver
se invocará cada vez que JUnit 5 encuentre un parámetroList
en una Prueba Parametrizada. El resolvedor dividirá el argumentoString
separado por comas en unaList<string>
, la cual se pasará al método de prueba.