Mockito Matchers isA,any,eq和eq之间的区别是什么?
我对它们之间的区别以及在这种情况下选择哪一种感到困惑。有些区别可能是显而易见的,比如 和 ,但我把它们都包括在内只是为了确定。any
eq
我想知道它们的差异,因为我遇到了这个问题:我在控制器类中有这个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")));
}
两者都运行良好。但是我希望我在 MockMvc 方法中接收 ,或者至少是一个具有与 (不仅仅是任何类) 相同的变量值的对象,并返回 ,就像第一个一样。我知道使用MockMvc方法是不可能的(或者它是吗?),因为在实际调用中传递的对象总是与在模拟中传递的对象不同。无论如何,我能做到这一点吗?或者这样做有意义吗?还是我应该满意使用?我试过了 ,但都失败了。someServiceMock.doSomething()
req
req
Request
res
any(Request.class)
eq
same