Mockito: método Stub con objeto complejo como parámetro

Tal vez esta es una pregunta para novatos, pero no puedo encontrar la respuesta.

Necesito tropezar un método con Mockito. Si el método tiene argumentos "simples", entonces puedo hacerlo. Por ejemplo, un método de búsqueda con dos parámetros, color del automóvil y número de puertas:

 when(carFinderMock.find(eq(Color.RED),anyInt())).thenReturn(Car1);
 when(carFinderMock.find(eq(Color.BLUE),anyInt())).thenReturn(Car2);
 when(carFinderMock.find(eq(Color.GREEN), eq(5))).thenReturn(Car3);

El problema es que el argumento de búsqueda es un objeto complejo.

 mappingFilter = new MappingFilter();
 mappingFilter.setColor(eq(Color.RED));
 mappingFilter.setDoorNumber(anyInt());
 when(carFinderMock.find(mappingFilter)).thenReturn(Car1);

Este código no funciona El error es "¡Uso no válido de emparejadores de argumentos! Se esperan 1 emparejadores, 2 registrados".

No se puede modificar el método "buscar", debe ser un parámetro MappingFilter.

Supongo que tengo que hacer "algo" para indicarle a Mockito que cuando el mappingFilter.getColor es ROJO, y mappingFilter.getDoorNumber es cualquiera, entonces tiene que devolver Car1 (y lo mismo para las otras dos oraciones). ¿Pero cómo?

Respuesta 1

Use un emparejador Hamcrest, como se muestra en la documentación :

when(carFinderMock.find(argThat(isRed()))).thenReturn(car1);

donde isRed()se define como

private Matcher<MappingFilter> isRed() {
    return new BaseMatcher<MappingFilter>() {
        // TODO implement abstract methods. matches() should check that the filter is RED.
    }
}
Respuesta: 2

Completé mi proyecto que me asignó la universidad, pero ahora estoy tratando de crear MDI para mi proyecto. Usé 10 jFrame y un formulario principal que también es jFrame, luego agregué una barra de menú, 10 ...

Me pregunto cuál es la complejidad temporal del tamaño () para la vista de porción de TreeSet. Digamos que estoy agregando números aleatorios para establecer (y no me importan las duplicidades): árbol final TreeSet <Integer> ...

Tengo esta enumeración: public enum Digits {ZERO (0); número int privado final; Dígitos privados (int número) {this.number = número; } public int getValue () {return number; ...

Esta puede ser una pregunta tonta para algunos programadores pro java, pero me estoy volviendo loco en este momento, así que todavía estoy preguntando. Por favor guíame en la dirección correcta a alguien. ¿Cómo analizo qué método / partOfMethod es ...