@ WebMvcTest,@ DataJpaTest我想知道它是“单元测试”还是“集成测试”。

时间:2019-06-22 13:44:02

标签: spring-boot tdd spring-boot-test

我英语不好。敬请谅解。

我知道。显然认为使用@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”,但我仍然不明白。

我很困惑。我只是在玩文字吗?

  1. 单元测试与集成测试...
  2. @WebMvcTest还是“ Integration Test”吗?

2 个答案:

答案 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组件的子集。因此,它们与集成测试有关。