我对它们之间的区别以及在哪种情况下选择哪一个感到困惑。有些差异可能很明显,例如any
and eq
,但我将它们全部包括在内只是为了确定。
我想知道它们的差异,因为我遇到了这个问题:
我在 Controller 类中有这个 POST 方法
public Response doSomething(@ResponseBody Request request) {
return someService.doSomething(request);
}
并想对该控制器执行单元测试。
我有两个版本。第一个是简单的,像这样
@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
,但都失败了。