Jestem zdezorientowany, jaka jest między nimi różnica, a którą wybrać w takim przypadku. Niektóre różnice mogą być oczywiste, jak na przykład any
i eq
, ale uwzględniam je wszystkie tylko po to, aby mieć pewność.Jaka jest różnica pomiędzy Matrix Matrix isA, any, eq i same?
Zastanawiam o dzielących ich różnic, ponieważ natknąłem tego problemu: mam tej metody POST w klasie Controller
public Response doSomething(@ResponseBody Request request) {
return someService.doSomething(request);
}
i chciałbyś wykonać test jednostki na tym kontrolerze. Mam dwie wersje. Pierwszym z nich jest prosta, jak to
@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));
}
Ale chciałem użyć podejście MockMvc, jak ten jeden
@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")));
}
Oba działają dobrze. Ale chciałem, aby mój someServiceMock.doSomething()
w podejściu MockMvc otrzymał req
, lub przynajmniej obiekt, który ma te same wartości zmiennych co req
(nie tylko jakakolwiek klasa Request
) i zwróci res
, podobnie jak pierwsza. Wiem, że to niemożliwe przy użyciu podejścia MockMvc (lub jest to?), Ponieważ obiekt przekazany w faktycznym wywołaniu jest zawsze inny niż obiekt przekazany w sztuczce. Czy mimo to mogę to osiągnąć? A może ma to jakiś sens? Czy powinienem być zadowolony używając any(Request.class)
? Próbowałem już eq
, same
, ale wszystkie z nich zawiodły.
Z góry dziękuję. Mam nadzieję, że wyjaśniłem się dobrze.