我英语不好。敬请谅解。
我知道。显然认为使用@SpringBootTest()
注释来加载整个Bean是“ Integration Test.
”
但是,@SpringBootTest(classes=mybean.class)
的使用被认为是“单元测试”,因为尽管它运行弹簧,但它仅运行某个(选定的)“ Bean(Class)
”。
我还认为使用@ContextConfiguration的方式也是“ Unit Tests.
”,因为我认为只能执行某些类,例如@ContextConfusion(classes=myBean.class)
。
但这是我的错误。我收到了最后一个StackOverflow的答案。
@SpringBootTest vs @ContextConfiguration vs @Import in Spring Boot Unit Test
我的最后一个问题->
使用@ContextConfiguration
是否可以作为“单元测试”
$$$ answer --->
不,它不能,它是一个集成测试,在春季仅运行一个类。
通常,我们不会只使用Spring Framework运行一个类。如果只想测试一个类(一个单元)的代码,在spring容器中运行它有什么好处?是的,在某些情况下,它可以是几个类,但不能是几十个或数百个。
如果您使用spring运行一个类,那么无论如何,您都必须模拟其所有依赖项,可以通过模仿来完成...
所以我再问一次。
“ @WebMvcTest
”也是“ Integration Tests
”吗?我以为“ @WebMvcTest
”就是“ Unit Test
”。但是,根据最后一个答案,@WebMvcTest
也运行弹簧。因此,最后一个答案的逻辑是“ @WebMvcTest
”也是“ Integration Test
”,但我仍然不明白。
我很困惑。我只是在玩文字吗?
@WebMvcTest
还是“ Integration Test
”吗?答案 0 :(得分:0)
春天doc的报价:
真正的单元测试通常运行非常快,因为没有 运行时基础架构进行设置。强调真实的单元测试 您的开发方法可以提高您的生产力。
Spring也是一种运行时基础架构。因此,单元测试应该运行,甚至不需要涉及其他框架。
然后,通过引入Spring TestContext Framework
来描述集成测试,整个section都被描述为:
Spring框架为集成提供了一流的支持 在弹簧测试模块中进行测试。实际JAR文件的名称 可能包括发行版本,也可能很长 org.springframework.test表单,具体取决于您从哪里获得(请参阅 有关依赖管理的部分以进行解释)。这个图书馆 包含
org.springframework.test
软件包,其中包含有价值的 与Spring容器进行集成测试的类。
@ContextConfiguration
来自Spring TestContext Framework
,而Spring Boot在其上构建以提供@SpringBootTest
和@WebMvcTest
等。因此,所有这些东西都用于集成测试。 / p>
总而言之,如果一个测试需要启动Spring才能运行,例如@WebMvcTest
,它不是单元测试,而是集成测试。
答案 1 :(得分:0)
首先,一些定义来自Software testing fundamentals web site:
单元测试是一个软件测试级别,其中测试软件的各个单元/组件。目的是验证软件的每个单元是否按设计执行。
集成测试是一个软件测试级别,其中各个单元组合在一起并作为一组进行测试。此级别测试的目的是揭示集成单元之间交互中的错误。
要回答您的问题,三个注释@SpringBootTest
,@ContextConfiguration
和@WebMvcTest
都涉及到加载Spring组件的子集。因此,它们与集成测试有关。