java - services - mockito service test example
Cómo escribir un marcador que no es igual a algo (3)
Con Mockito
framework, puede usar AdditionalMatchers
ClassA classA = Mockito.mock(ClassA.class);
Mockito.when(classA.getString(Matchers.eq("a"))).thenReturn("something");
Mockito.when(classA.getString(AdditionalMatchers.not(Matchers.eq("a")))).thenReturn("something else");
Espero eso ayude.
Estoy tratando de crear un simulacro para una llamada. Digamos que tengo este método que estoy intentando eliminar:
class ClassA {
public String getString(String a) {
return a + "hey";
}
}
Lo que estoy tratando de burlar es: primera instancia es
when(classA.getString(eq("a")).thenReturn(...);`
en el mismo caso de prueba
when(classA.getString([anything that is not a])).thenReturn(somethingelse);
El segundo caso es mi pregunta: ¿cómo puedo anyString()
no sea "a"?
De hecho, tomé este enfoque después de mirar cuidadosamente las respuestas sugeridas:
doAnswer(new Answer<String>() {
public String answer(InvocationOnMock invocation) throws Throwable {
String originalParam = (String) invocation.getArguments()[0];
return StringUtils.equalsIgnoreCase(originalParam, "a") ? "Something" : "Something Else";
}
}).when(classA).getString(anyString());
Esto me permite manejar más de dos casos ajustando la base de retorno en los params.
Usa argThat
con Hamcrest:
when(classA.getString(argThat(CoreMatchers.not(CoreMatchers.equalTo("a")))...
También puede hacer esto a través del pedido. Si coloca uno when(anyString)
y when(eq("a"))
en el orden correcto, Mockito debería probarlos en orden y hacer la lógica "a" cuando corresponda y luego la lógica "anyString" de lo contrario.