with test services mock example ejemplo java junit mockito matcher

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.