【发布时间】:2020-11-19 11:08:38
【问题描述】:
我有一个用于创建和获取员工的休息控制器。为了测试这些端点,我有两个类。在其中,我模拟了服务层并进行状态代码检查,例如:
Mockito.when(employeeService.createEmployee(any(Employee.class))).then(returnsFirstArg());
this.employeeClient.createEmployee(this.testEmployee)
.andExpect(status().isCreated());
另一方面,我启动了一个 docker postgres 数据库并且不模拟任何东西。这些测试涉及多个端点,例如“如果我创建一个员工,然后获取所有员工,则应该返回创建的员工”。
这两个类都创建了一个应用上下文——第一个使用WebMvcTest注解,第二个使用SpringBootTest。出于这个原因,我将它们都视为集成测试。
那么我怎么称呼这些测试呢?我目前正在使用 EmployeeControllerTest 和 EmployeeContorllerIT(使用故障安全插件运行 IT),但第一个名称有点误导,因为它不是真正的单元测试。
我曾考虑使用EmployeControllerMockedIT 作为第一个,但不相信这是正确的方法。
【问题讨论】:
-
我不确定是否有任何命名约定,因为除了 *Test 之外的任何内容都需要某种设置才能在您的构建中运行测试。但是为什么在这里需要两个单独的测试呢?难道你不能有一个可以做所有事情的测试吗,从模拟的 http 调用到业务逻辑和数据库验证?将现有的 SpringBootTest 更改为使用 MockMVC 应该不难。
-
分开,因为在非模拟测试类中,为每个测试准备了一个新的 postgres docker db。不希望对所有模拟服务层的测试产生这种开销。
-
是的,我可以将 SpringBootTest 类更改为使用 MockMvc。但是那个类正在做我想要一个真正的数据库的东西,即验证所有代码是否按预期与数据库一起工作。
标签: java spring spring-boot