Spring boot:在测试控制器层时应该验证是否已经过测试

时间:2017-11-14 15:32:21

标签: spring-boot junit mocking spring-validator

我正在开展这个项目,我希望拥有体面的测试基础设施。 我正在使用spring boot,这样可以更轻松地测试项目的各个层:例如

如果我想测试控制器层,我将模拟(使用mockito)控制器的服务依赖性,并检查是否将在给定的http请求上调用正确的服务方法,并且将返回预期的http状态。如果我想测试服务层,我将模拟存储库和业务逻辑依赖项。等等。

在我的项目中,我使用spring验证器检查请求体是否正确传递(使用@InitBinder方法我将自定义验证器添加到WebDataBinder,并使用@Valid注释,调用这些验证器在解析的请求主体上)。

所以我的问题是:模拟验证器并仅测试控制器逻辑(验证器将在验证器层的上下文中进行测试)是一种好习惯吗? 我只是不确定哪种是最佳做法,测试验证器和控制器是否正常?

1 个答案:

答案 0 :(得分:0)

当您测试控制器逻辑,验证逻辑以及特别是业务逻辑时,模拟并不总是最佳选择。我不建议嘲笑这些。

您可以使用各种框架进行测试:

  1. 控制器逻辑 - RestAssured或MockMvc
  2. 业务逻辑 - SpringBootTest SpringRunner
  3. 下的简单JUnit测试
  4. 验证逻辑 - 在 SpringBootTest 下的简单JUnit测试 SpringRunner
  5. 进一步阅读:
    RestAssured http://rest-assured.io/
    Spring验证器测试Writing JUnit tests for Spring Validator implementation