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

时间:2019-11-28 23:08:25

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

我有一个SpringBoot MVC应用程序,并希望通过测试来覆盖它(说实话,我只是想继续享有“编写测试的好男孩”的美誉)。

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

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

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

使用@SpringBootTest时的AFAIK称为集成测试,这是否意味着它不应出现得太频繁?

我想每一个代码块都应该包含单元测试,集成是否一样?还是集成测试应该在舞台环境上工作,而不是在测试环境上工作?

如果创建@SpringBootTest却模拟其他图层,是否在性能方面不一样? (假设我创建了多个@SpringBootTest并模拟其他层-逐层-)

1 个答案:

答案 0 :(得分:1)

  • @SpringBootTest加载整个应用程序上下文,就像运行Spring Boot应用程序时启动Spring容器的方式一样。
  • @WebMvcTest仅加载Web层,其中包括用于处理请求/响应的安全性,筛选器,拦截器等。通常,您会为@Controller@RestController下的方法编写测试。
  • @DataJpaTest仅加载JPA的配置。如果没有另外指定,它将使用嵌入式内存h2。

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

关于最佳做法,实际上只是关注点分离。我很少使用过@SpringBootTest,除非它是为了对我的本地计算机进行临时集成测试。像@WebMvcTest这样的注释使您的测试更加“模块化”,并且速度更快。