Spring boot @WebMvcTest,@DataJpaTest我想知道它是否';s";单元测试“;或;集成测试。”;

Spring boot @WebMvcTest,@DataJpaTest我想知道它是否';s";单元测试“;或;集成测试。”;,spring-boot,tdd,spring-boot-test,Spring Boot,Tdd,Spring Boot Test,我不擅长英语。请理解 我知道。使用@springbootest()注释加载整个Bean显然被认为是一种“集成测试。” 然而,@SpringBootTest(classes=mybean.class)的使用被认为是“单元测试”,因为它只运行某个(选定的)Bean(class),尽管它运行的是spring 我还认为使用@ContextConfiguration的方法也是“单元测试。”,因为我认为只能执行某些类,比如@ContextConfiguration(classes=myBean.class)

我不擅长英语。请理解

我知道。使用
@springbootest()
注释加载整个Bean显然被认为是一种“
集成测试。

然而,
@SpringBootTest(classes=mybean.class)
的使用被认为是“单元测试”,因为它只运行某个(选定的)
Bean(class)
,尽管它运行的是spring

我还认为使用@ContextConfiguration的方法也是“
单元测试。
”,因为我认为只能执行某些类,比如
@ContextConfiguration(classes=myBean.class)

但这是我的错,我收到了上一次的答复

我的最后一个问题--> 使用
@ContextConfiguration
是否可以作为“单元测试” $$$答案--> 不,它不能,它是一个集成测试,在spring中只运行一个类。 通常,我们不会在Spring框架中只运行一个类。如果您只想测试一个类(一个单元)的代码,那么在Spring容器中运行它有什么好处?是的,在某些情况下,它可以是几个类,而不是几十个或几百个。 如果您使用spring运行一个类,那么在任何情况下,您都必须模拟它的所有依赖项,同样可以使用mockito进行模拟

所以我再问一次

@WebMvcTest
”也是“
集成测试
”吗?我认为“
@WebMvcTest
”是“
单元测试
”但是,根据上一个答案,
@WebMvcTest
也有spring运行。所以最后一个答案的逻辑是“
@WebMvcTest
”也是“
集成测试
”,“但我还是不明白

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

  • 单元测试与集成测试
  • @WebMvcTest
    是否也是一个“
    集成测试”
  • 引自Spring:

    True单元测试通常运行得非常快,因为没有 要设置的运行时基础结构。强调真正的单元测试作为测试的一部分 开发方法的改进可以提高生产力

    Spring也是一种运行时基础设施,所以单元测试应该在不需要涉及其他框架(甚至Spring)的情况下运行


    然后通过介绍
    Spring-TestContext-Framework
    来讨论集成测试,它描述为:

    Spring框架为集成提供了一流的支持 在弹簧测试模块中进行测试。实际JAR文件的名称 可能包括发布版本,也可能是长期版本 org.springframework.test表单,具体取决于您从何处获得它(请参见 有关依赖关系管理的部分(有关说明)。这个图书馆 包括
    org.springframework.test
    包,其中包含有价值的 使用Spring容器进行集成测试的类

    @ContextConfiguration
    来自
    SpringTestContext框架
    ,而SpringBoot在其上构建,以提供
    @SpringBootTest
    @WebMvcTest
    等。因此,所有这些内容都是用于集成测试的


    总之,如果一个测试需要启动Spring才能运行,比如
    @WebMvcTest
    ,那么它不是一个单元测试,而是一个集成测试

    首先,一些定义取自:

    单元测试是一种软件测试级别,其中测试软件的各个单元/组件。目的是验证软件的每个单元是否按设计执行

    集成测试是一种软件测试级别,其中单个单元作为一个组进行组合和测试。此级别测试的目的是暴露集成单元之间交互中的故障

    为了回答您的问题,三个注释和都涉及到加载Spring组件的子集。因此,它们与集成测试相关