java - Mockito anyMapOf genéricos anidados
generics mocking (1)
No hay forma de usar anyMapOf
para hacer esto. Está diseñado para ayudar con el simple caso de asignar clases simples a clases simples en Java 7 , y el tuyo es más complejo que eso.
La inferencia de los parámetros de Java 8 mejoró, por lo que en Java 8, puedes simplemente usar any()
.
verify(dataProcessor).process(Matchers.any());
Salvo eso, la mejor manera de hacer este look es como usted escribió arriba:
verify(dataProcessor).process(Matchers.<Map<String, Set<String>>>any());
O al extraer el matcher a una función estática, que proporciona a Java la información suficiente que necesita para inferir el tipo por sí mismo:
@Test public void yourTest() {
// ...
verify(dataProcessor).process(anyStringSetMap());
}
private static Map<String, Set<String>> anyStringSetMap() {
return any();
}
(Advertencia: anyStringMap
cuenta que el valor de retorno de anyStringMap
es nulo, es el efecto secundario de llamar a any
que esté buscando . El método extraído es solo para informar al compilador de Java del tipo de retorno esperado; tenga en cuenta que haciendo cualquier cosa más elegante probablemente rompa formas realmente bastante interesantes.)
Estoy intentando verificar que se llamó un método con la siguiente firma:
public void process(Map<String, Set<String>> data) {
...
}
El conjunto parametrizado anidado me está causando dificultades. Puedo hacer que verifique correctamente con el matcher any () así:
verify(dataProcessor).process(Matchers.<Map<String, Set<String>>> any());
Como se describe en Mockito: Verificación con parámetros genéricos aunque molestamente no funciona si hago una importación estática directa de Matchers.any y la llamo simplemente:
verify(dataProcessor).process(<Map<String, Set<String>>> any())
Pero anyMapOf (clazz, clazz) parece el más apropiado en este caso. Como no puedes hacer Set.class, no estoy seguro de cómo harías esto. Lo siguiente no funciona debido a la falta de genéricos:
verify(dataProcessor).process(anyMapOf(String.class, Set.class));
¿Es posible verificar esta situación con anyMapOf o debería seguir con Matchers. <> Any ()?