gpt4 book ai didi

java - 使用 Mockito 测试涉及数据库调用的 Rest API

转载 作者:行者123 更新时间:2023-12-02 02:18:01 25 4
gpt4 key购买 nike

我需要对我的应用程序基于 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 执行数据库调用以从数据库获取 ID。

现在当我这样做

 mockMvc.perform(MockMvcRequestBuilders.get("/todo/3")
.accept(MediaType.APPLICATION_JSON)

它将访问数据库。

现在,这种方式的模拟正在变得更像是到达端点的集成测试。这是正确的做法吗?否则

  1. 使用 Mockito 进行单元测试并访问数据库或 Web 服务等外部实体的正确方法是什么

  2. 如何模拟数据库以及如何在模拟后获取数据库数据。

最佳答案

正如 @pvpkiran 提到的,如果你测试一个单元,你就会模拟这个单元的引用。因此,在这种情况下回答您的问题:

what is the right way of using Mockito for unit testing with hitting external entities like DB or webservice?

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

ToDoService toDoService = Mockito.mock(ToDoService.class)

然后告诉 Mockito 如何对特定调用使用react(在设置方法或测试方法中):

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

How to mock the database and how do I get the DB data if mocked?

在这种情况下,您模拟了整个服务。如果您想测试 DAO,Spring(您显然会使用它)提供了一个嵌入式数据库,您可以使用 sql 脚本进行配置。请参阅 documentation .

关于java - 使用 Mockito 测试涉及数据库调用的 Rest API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48991145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com