Ich bin verwirrt, was ist der Unterschied zwischen ihnen, und welche in welchem Fall zu wählen. Ein gewisser Unterschied könnte offensichtlich sein, wie any
und eq
, aber ich nehme sie alle nur um sicher zu sein.Was ist der Unterschied zwischen Mockito Matchers isA, any, eq und same?
ich über ihre Unterschiede fragen, weil ich auf diesem Problem kam: Ich habe diese POST-Methode in einer Controller-Klasse
public Response doSomething(@ResponseBody Request request) {
return someService.doSomething(request);
}
Und möchte einen Unit-Test auf diesem Controller auszuführen. Ich habe zwei Versionen. Die erste ist die einfache, wie dieser
@Test
public void testDoSomething() {
//initialize ObjectMapper mapper
//initialize Request req and Response res
when(someServiceMock.doSomething(req)).thenReturn(res);
Response actualRes = someController.doSomething(req);
assertThat(actualRes, is(res));
}
Aber ich wollte einen MockMvc Ansatz verwenden, wie dieser
@Test
public void testDoSomething() {
//initialize ObjectMapper mapper
//initialize Request req and Response res
when(someServiceMock.doSomething(any(Request.class))).thenReturn(res);
mockMvc.perform(post("/do/something")
.contentType(MediaType.APPLICATION_JSON)
.content(mapper.writeValueAsString(req))
)
.andExpect(status().isOk())
.andExpect(jsonPath("$message", is("done")));
}
Beide gut funktionieren. Aber ich wollte meine someServiceMock.doSomething()
in der MockMvc Ansatz, req
, oder mindestens ein Objekt, das die gleichen Variablen wie req
(nicht nur eine Request
Klasse), und res
, genau wie die erste. Ich weiß, dass es unmöglich ist, den MockMvc-Ansatz zu verwenden (oder?), Weil das Objekt, das im tatsächlichen Aufruf übergeben wird, sich immer von dem im Mock übergebenen Objekt unterscheidet. Kann ich das überhaupt erreichen? Oder macht es überhaupt Sinn, das zu tun? Oder sollte ich mit any(Request.class)
zufrieden sein? Ich habe versucht eq
, same
, aber alle von ihnen scheitern.
Vielen Dank im Voraus. Ich hoffe ich habe mich gut erklärt.