spring-boot - @SpringBootTest 与 @WebMvcTest & @DataJpaTest &service 单元测试,什么是最好的?

标签 spring-boot unit-testing spring-mvc spring-boot-test

我有一个 SpringBoot MVC 应用程序,我想用测试来覆盖它。
我有 Controller 、服务和存储库层。
通过测试覆盖应用程序的最佳实践是什么?
人们为什么使用@SpringBootTest虽然它似乎可以通过 @WebMvcTest 分层测试& @DataJpaTest和服务单元测试?它更快,更细化,不是吗?
AFAIK 当@SpringBootTest使用它称为集成测试,这是否意味着它不应该经常出现?
我想每一 block 代码都应该被单元测试覆盖,集成覆盖是否一样?或者集成测试应该在舞台环境而不是在测试环境中工作?
如果我创建一个 @SpringBootTest 是不是一样(在性能方面)但模拟其他层? (假设我创建了多个 @SpringBootTest 并模拟其他层)。

最佳答案

  • @SpringBootTest加载完整的应用程序上下文,就像您在运行 Spring Boot 应用程序时启动 Spring 容器的方式一样。
  • @WebMvcTest仅加载 web 层,其中包括用于处理请求/响应的安全性、过滤器、拦截器等。通常你会为 @Controller 下的方法编写测试。或 @RestController .
  • @DataJpaTest仅加载 JPA 的配置。如果没有另外指定,它使用嵌入式内存 h2。
  • 理想情况下,服务层测试不应该有任何注释(除了那些有助于模拟的注释),因为这是您的业务逻辑(独立于任何配置)所在的位置。

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

    关于spring-boot - @SpringBootTest 与 @WebMvcTest & @DataJpaTest &service 单元测试,什么是最好的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097035/

    相关文章:

    spring-mvc - 使用 Hibernate Validator(JSR 303) 与其他框架(ESAPI、Apache Commons 等)进行输入验证

    java - 如何在 Tomcat 8 中创建一个新的共享文件夹并从中加载我的属性文件

    spring-boot - 如何为特定客户端设置自定义 Feign RequestInterceptor?

    使用不同的 URL 进行 java servlet 测试

    spring-boot - 如何将 CircuitBreaker 与 TimeLimiter 和 Bulkhead 结合使用?

    python - 如何从unittest框架中的另一个测试调用测试方法?

    unit-testing - 单元测试失败,断言失败 : line 17: '<optimized out>' : is not true

    hibernate - @autowired 注释问题,不在类中注入(inject) bean,使用 Spring3.0, hibernate

    spring-boot - 使用 Flyway 设置多个数据库

    java - 打包的 Spring boot 应用程序无法将其余 api 错误解析为消息