首页 > 解决方案 > @SpringBootTest(classes = SomeController.class) 和 @WebMvcTest(SomeController.class) 之间的区别

问题描述

我知道@SpringbootTest在测试期间使用我提高了整个弹簧上下文,或者在我的情况下使用@SpringBootTest(classes = SomeController.class)我只提高了一个 bean -> SomeController。如果这个控制器有一些依赖项,我需要模拟它们。使用注释@WebMvcTest(SoneController.class)我将(根据我的知识)实现相同的目标。

问题是:在提供的示例中使用的这两个注释之间有什么区别吗?

标签: javaspring-bootspring-mvcmockito

解决方案


@SpringBootTest(classes = SomeController.class)和之间有明显的区别@WebMvcTest(SomeController.class)

  • @SpringBootTest(classes = SomeController.class)- 使用组件启动服务器(例如 Tomcat)+ spring 应用程序上下文SomeController.class。除了控制器之外,您通常应该指定上下文配置以成功启动整个应用程序(例如:当您不指定时classes,它会回退到@SpringBootApplication)。

  • @WebMvcTest(SomeController.class)- 仅使用 . 启动应用程序的Web 层SomeController.class

有什么不同?

@SpringBootTest测试通常是集成测试,您启动完整的 spring-boot 应用程序并针对该黑盒进行测试。您仍然可以通过在注释参数中提供配置、属性、Web 服务器类型等来调整应用程序启动。

@WebMvcTest(SomeController.class)通常是您的控制器的单元测试。这些是轻量级和快速的。@Service在此类测试中模拟了类等依赖项。

这是一个很好的起点 - https://spring.io/guides/gs/testing-web/


推荐阅读