Spring集成测试命名约定



我有一个用于创建和获取员工的休息控制器。为了测试这些端点,我有两个类。在一个例子中,我模拟服务层并进行状态代码检查,例如:

Mockito.when(employeeService.createEmployee(any(Employee.class))).then(returnsFirstArg());
this.employeeClient.createEmployee(this.testEmployee)
.andExpect(status().isCreated());

在另一个例子中,我启动了一个dockerpostgres数据库,不模拟任何东西。这些测试涉及多个端点,例如;如果我创建了一个员工,然后获取所有员工,那么创建的员工应该被返回"。

这两个类都创建了一个应用程序上下文——第一个类使用WebMvcTest注释,第二个使用SpringBootTest。出于这个原因,我认为它们都是集成测试。

那么我该怎么称呼这些测试呢?我目前正在使用EmployeeControllerTestEmployeeContorllerIT(使用故障保护插件运行IT(,但第一个的名称有点误导,因为它不是真正的单元测试。

我第一次考虑使用EmployeControllerMockedIT,但不相信这是正确的做法。

如果你在嘲笑响应,我会说这是一个单元测试,因为你是在与网络和第三方系统(如数据库(隔离的情况下测试代码模块。

如果你正在针对你不控制的(真实的(第三方代码/系统运行测试,那就是集成(或功能(测试。

功能测试将调用您的服务,就好像您的系统是一个我们不知道内部细节的黑盒(而不是白盒,我们知道并有权更改内部和调用代码,就好像我们在进行方法调用而不是发送HTTP请求一样(。

功能测试可能针对真实/虚假服务器运行,但通常会有一个正在运行的应用程序在等待请求。这里的重点是,响应不是";嘲笑";,请求是真实的,从您的代码到第三方代码/系统,该系统应该像真实的服务器一样响应。

我们在功能测试中不会伪造响应,但真实/伪造服务器可能会提供任意响应,以模拟我们期望接收的数据。可能是我们编写了一个虚假的HTTP服务;mock";真正的API。它将通过网络提供完全相同类型的响应,并通过网络调用。或者,我们可以旋转一个码头数据库,向其发送查询并从中接收响应。该数据库将是一个真正的数据库服务器,而不是我们在代码中预先指定的模拟响应。

(web服务的(功能测试将从应用程序外部开始,并确保通过网络层回答请求。即,您将发出一个HTTP请求来调用该服务。

web服务的集成测试将在应用程序级别(而不是通过网络层(调用该服务,因此您可以直接调用Controller类,或者调用一些应该从应用程序中连接/集成数据库的代码。集成测试将测试您的代码是否与第三方代码/库/数据库正确集成。你的测试应该提醒你,如果第三方代码(你不控制的代码/系统(发生变化,你的软件就会崩溃。

最新更新