@SpringBootTest VS @WebMvcTest & @DataJpaTest &service 单元测试,哪个最好?
@SpringBootTest Vs @WebMvcTest & @DataJpaTest &service unit tests, what is the best?
我有一个 SpringBoot MVC 应用程序,我想用测试覆盖它。
我有控制器、服务和存储库层。
通过测试覆盖应用程序的最佳做法是什么?
为什么人们使用 @SpringBootTest
,而它似乎可以通过 @WebMvcTest
& @DataJpaTest
和服务单元测试进行分层测试?它更快、更精细,不是吗?
AFAIK 当使用 @SpringBootTest
时称为集成测试,那么这是否意味着它不应该出现得太频繁?
我想每个代码块都应该被单元测试覆盖,集成覆盖是否相同?或者集成测试应该在舞台环境而不是测试环境中工作?
如果我创建一个 @SpringBootTest
但模拟其他层,这不是一样的(在性能方面)吗? (假设我创建多个 @SpringBootTest
并模拟其他层)。
@SpringBootTest
加载完整的应用程序上下文,就像您在 运行 您的 Spring 引导应用程序时启动 Spring 容器的方式一样。
@WebMvcTest
仅加载 web 层,其中包括用于处理 request/response 的安全、过滤器、拦截器等。通常,您会为 @Controller
或 @RestController
.
下的方法编写测试
@DataJpaTest
只加载 JPA 的配置。如果没有另外指定,它会使用嵌入式内存中的 h2。
理想情况下,服务层测试不应有任何注释(除了有助于模拟的注释),因为这是您的业务逻辑(独立于任何配置)所在的位置。
关于最佳实践,它实际上只是关注点分离。我很少使用 @SpringBootTest
除非它是为了在我的本地进行一些临时集成测试。 @WebMvcTest
之类的注释使您的测试更加 'modularized' 并且速度稍快。
我有一个 SpringBoot MVC 应用程序,我想用测试覆盖它。
我有控制器、服务和存储库层。
通过测试覆盖应用程序的最佳做法是什么?
为什么人们使用 @SpringBootTest
,而它似乎可以通过 @WebMvcTest
& @DataJpaTest
和服务单元测试进行分层测试?它更快、更精细,不是吗?
AFAIK 当使用 @SpringBootTest
时称为集成测试,那么这是否意味着它不应该出现得太频繁?
我想每个代码块都应该被单元测试覆盖,集成覆盖是否相同?或者集成测试应该在舞台环境而不是测试环境中工作?
如果我创建一个 @SpringBootTest
但模拟其他层,这不是一样的(在性能方面)吗? (假设我创建多个 @SpringBootTest
并模拟其他层)。
@SpringBootTest
加载完整的应用程序上下文,就像您在 运行 您的 Spring 引导应用程序时启动 Spring 容器的方式一样。
下的方法编写测试@WebMvcTest
仅加载 web 层,其中包括用于处理 request/response 的安全、过滤器、拦截器等。通常,您会为@Controller
或@RestController
.@DataJpaTest
只加载 JPA 的配置。如果没有另外指定,它会使用嵌入式内存中的 h2。理想情况下,服务层测试不应有任何注释(除了有助于模拟的注释),因为这是您的业务逻辑(独立于任何配置)所在的位置。
关于最佳实践,它实际上只是关注点分离。我很少使用 @SpringBootTest
除非它是为了在我的本地进行一些临时集成测试。 @WebMvcTest
之类的注释使您的测试更加 'modularized' 并且速度稍快。