Tôi đang bối rối về sự khác biệt giữa chúng là gì, và cái nào để chọn trong trường hợp nào. Một số khác biệt có thể hiển nhiên, như any
và eq
, nhưng tôi chỉ bao gồm tất cả những điều đó để đảm bảo.Sự khác nhau giữa Mockito Matchers là gì, bất kỳ, eq và giống nhau?
Tôi tự hỏi về sự khác biệt của họ, vì tôi đã xem qua vấn đề này: tôi có phương thức POST này trong một lớp điều khiển
public Response doSomething(@ResponseBody Request request) {
return someService.doSomething(request);
}
Và muốn thực hiện một thử nghiệm đơn vị trên bộ điều khiển đó. Tôi có hai phiên bản. Người đầu tiên là một trong những đơn giản, như thế này
@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));
}
Nhưng tôi muốn sử dụng một cách tiếp cận MockMvc, như thế này một
@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")));
}
Cả hai làm việc tốt. Nhưng tôi muốn someServiceMock.doSomething()
trong phương pháp MockMvc để nhận req
hoặc ít nhất một đối tượng có cùng giá trị biến là req
(không chỉ bất kỳ lớp nào Request
) và trả lại res
, giống như lần đầu tiên. Tôi biết rằng nó không thể sử dụng cách tiếp cận MockMvc (hoặc là nó?), Bởi vì đối tượng được thông qua trong các cuộc gọi thực tế là luôn luôn khác nhau từ các đối tượng được thông qua trong mô hình. Có anyway tôi có thể đạt được điều đó? Hay nó có ý nghĩa để làm điều đó? Hoặc tôi có nên hài lòng khi sử dụng any(Request.class)
không? Tôi đã thử eq
, same
, nhưng tất cả đều không thành công.
Cảm ơn bạn trước. Tôi hy vọng tôi đã giải thích tốt cho bản thân mình.