【发布时间】:2015-09-02 14:17:44
【问题描述】:
我对它们之间的区别以及在哪种情况下选择哪个感到困惑。有些区别可能很明显,例如 any 和 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,但都失败了。
【问题讨论】:
标签: java unit-testing mockito difference matcher