【发布时间】:2018-02-26 23:27:01
【问题描述】:
我需要对基于 REST 的应用程序 API 进行一些单元测试。
例如,如果 API 如下所示
@RequestMapping(value = "/todo/{id}", method = RequestMethod.GET)
public ResponseEntity<ToDo> getToDoById(@PathVariable("id") long id) throws ToDoException{
//Makes DB call
ToDo toDo = toDoService.getToDoById(id);
}
上述 API 执行 DB 调用以从数据库中获取 ID。
当我这样做的时候
mockMvc.perform(MockMvcRequestBuilders.get("/todo/3")
.accept(MediaType.APPLICATION_JSON)
它将访问数据库。
现在,这种方式的模拟越来越多地成为到达端点的集成测试。这是正确的做法吗,否则
什么是使用 Mockito 进行单元测试并打击 DB 或 Web 服务等外部实体的正确方法
如何模拟数据库,如果被模拟,我如何获取数据库数据。
【问题讨论】:
-
在测试你的控制器时,你需要模拟所有的服务调用。
-
那很酷的答案.. 但我看到了一个示例,其中使用
@Autowired private WebApplicationContext wac;没有任何模拟服务调用,但结果可用 -
他们可能正在加载完整的应用上下文,并使用它。他们可能正在加载模拟 bean 或测试 bean。
-
@pvpkiran: 如果在服务调用之后有任何以下 helper.get 方法调用,它们也应该被模拟吗?