使用Mockito测试涉及DB调用的REST API



我需要为基于静止的应用程序的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)

它将点击数据库。

现在,这种嘲笑正在成为越来越多的整数测试击中终点。这是正确的方法还是

  1. 使用Mockito进行单位测试的正确方法是什么,与击中DB或WebService这样的外部实体

  2. 如何模拟数据库,如果被嘲笑,我如何获取数据库。

如@pvpkiran所述,如果测试一个单元,则模拟本机的引用。因此,在这种情况下回答您的问题:

使用Mockito进行单位测试的正确方法是什么?

将模拟对象定义为单元测试中的类属性:

ToDoService toDoService = Mockito.mock(ToDoService.class)

然后告诉Mockito如何在特定呼叫中做出反应(在设置方法或测试方法中(:

ToDo toDo = new ToDo(...);
//configure your todo object to satisfy your needs
Mockito.when(toDoService.getToDoById(123l)).thenReturn(toDo); //returns the created object only if called with 123l

Mockito.when(toDoService.getToDoById(Matchers.anyLong())).thenReturn(toDo); //returns the created object for a call with any long value

如何模拟数据库,如果被模拟,我如何获取数据库数据?

在这种情况下,您可以模拟整个服务。如果要测试DAO,则Spring(显然是使用(提供一个嵌入式数据库,您可以使用SQL脚本配置。看到文档。

相关内容

  • 没有找到相关文章

最新更新