繁体   English   中英

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

[英]@SpringBootTest Vs @WebMvcTest & @DataJpaTest &service unit tests, what is the best?

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

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

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

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

据我所知,当使用@SpringBootTest时,它被称为集成测试,这是否意味着它不应该出现得太频繁?

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

如果我创建一个@SpringBootTest但模拟其他层,这不是一样的(就性能而言)吗? (假设我创建多个@SpringBootTest并模拟其他层)。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM