@SpringBootTest 与 @WebMvcTest & @DataJpaTest &service 单元测试,哪个最好?

J.J*_*eam 4 unit-testing spring-mvc spring-boot spring-boot-test

我有一个 SpringBoot MVC 应用程序,我想用测试来覆盖它。

我有控制器、服务和存储库层。

通过测试覆盖应用程序的最佳实践是什么?

为什么人们使用@SpringBootTest它似乎可以通过@WebMvcTest@DataJpaTest和服务单元测试进行层测试?它更快,更精细,不是吗?

AFAIK 什么时候@SpringBootTest使用它被称为集成测试,所以这是否意味着它不应该经常出现?

我想每一块代码都应该被单元测试覆盖,集成覆盖是否相同?或者集成测试应该在舞台环境中工作而不是在测试环境中工作?

如果我创建一个@SpringBootTest但模拟其他层,是不是一样(在性能方面)?(假设我创建了多个@SpringBootTests 并模拟其他层)。

夢のの*_*のの夢 10

  • @SpringBootTest 加载完整的应用程序上下文,就像运行 Spring Boot 应用程序时启动 Spring 容器的方式一样。

  • @WebMvcTest仅加载 web 层,其中包括用于处理请求/响应的安全性、过滤器、拦截器等。通常,您会为@Controller或下的方法编写测试@RestController

  • @DataJpaTest仅加载 JPA 的配置。如果没有另外指定,它使用嵌入式内存 h2。

  • 理想情况下,服务层测试不应有任何注释(除了有助于模拟的注释),因为这是您的业务逻辑(独立于任何配置)所在的位置。

关于最佳实践,它实际上只是关注点分离。我很少使用,@SpringBootTest除非它是为了我本地的一些临时集成测试。诸如注释之类的@WebMvcTest让您的测试更加“模块化”且速度更快。