java - @SpringBootTest(classes = SomeController.class) 和 @WebMvcTest(SomeController.class) 之间的区别
问题描述
我知道@SpringbootTest
在测试期间使用我提高了整个弹簧上下文,或者在我的情况下使用@SpringBootTest(classes = SomeController.class)
我只提高了一个 bean -> SomeController。如果这个控制器有一些依赖项,我需要模拟它们。使用注释@WebMvcTest(SoneController.class)
我将(根据我的知识)实现相同的目标。
问题是:在提供的示例中使用的这两个注释之间有什么区别吗?
解决方案
@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/
推荐阅读
- azure - 让 nginx-ingress 在 Azure 中使用 UDP
- javascript - 如何更改部分的背景?(不是,
) - python - GridSearchCV 忽略训练/测试大小
- regex - 正则表达式查找和替换固定标签内的逗号并使用记事本++更改数字
- c++ - 如何增加 Visual Studio C++ 中的堆栈大小?
- c# - 如何修复应用服务中的 SNAT 耗尽
- node.js - 在带有路由器的vue js导航栏中查找链接的问题
- python - 此网站无法提供安全连接 Google App Engine
- c# - 在静态构造函数中或外部声明静态字段之间的区别
- ios - Flutter 上的 AirPlay IOS