Я смущен тем, какая разница между ними, и какой из них выбрать в этом случае. Некоторая разница может быть очевидна, например, any
и eq
, но я включаю их все, чтобы быть уверенными.
Мне интересно об их различиях, потому что я столкнулся с этой проблемой: У меня есть этот метод POST в классе Controller
public Response doSomething(@ResponseBody Request request) {
return someService.doSomething(request);
}
И хотел бы выполнить unit test на этом контроллере. У меня две версии. Первый из них простой, как этот
@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));
}
Но я хотел использовать подход MockMvc, как этот
@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")));
}
Оба работают хорошо. Но я хотел, чтобы мой someServiceMock.doSomething()
в подходе MockMvc получил req
, или, по крайней мере, объект, который имеет те же переменные, что и req
(а не только любой класс Request
), и возвращает res
, как и первый. Я знаю, что невозможно использовать подход MockMvc (или это?), Потому что объект, переданный в реальном вызове, всегда отличается от объекта, переданного в макете. В любом случае, я могу это достичь? Или это даже имеет смысл сделать это? Или я должен быть удовлетворен с помощью any(Request.class)
? Я пробовал eq
, same
, но все они терпят неудачу.
Спасибо заранее. Надеюсь, я хорошо себя объяснил.