junit-vintage-engine 和 junit-jupiter-engine 之间的区别?

Difference between junit-vintage-engine and junit-jupiter-engine?

这是一个双重问题。

  1. junit-vintage-enginejunit-jupiter-engine有什么区别?
  2. SpringBoot 入门项目附带 junit-vintage-engine 的排除项。是强制使用junit-jupiter-engine吗?

下面是我的SpringBoot项目从Spring Initializr生成的依赖:

        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

junit-vintage-engine 用于 运行 JUnit 4 测试; junit-jupiter-engine 用于 JUnit 5 测试。

大概因为您将只为新的 Spring 启动项目编写 JUnit 5 测试,所以不需要老式引擎,因此 POM 中的默认依赖项排除。

参考:

https://junit.org/junit5/docs/current/user-guide

答案:1. 根据阅读,我发现了一些差异,例如,

junit-vintage-engine :

  • 用于 Junit-4 测试。
  • 用于调用核心类和注解
  • 'Assert' 提供执行测试的断言方法。
  • 'Assume' 用于放置假设。
  • 使用@Ignore、@Before 等注释...

junit-jupiter-engine :

  • 用于 Junit-5 测试
  • 提供一些API对编写测试用例有帮助
  • 'Assertions' 提供测试断言条件的实用方法
  • 'Assumptions' - 效用方法提供基于假设的条件。
  • 更改注释名称的位,如@Disable、@BeforeAll、@BeforeEach 等...

答案:2. 我也很惊讶他们仍然提供旧的老式图书馆可能有一些我现在不知道的原因但是根据当前的使用情况我们会在下次更新中看到。

祝你有美好的一天!!! :)

第一个问题也和JDK的版本有关。要使用 jupiter 引擎,您必须拥有 Java 8 或更高版本。对于第二个问题;由于 vintage 引擎是为 JUnit4 设计的,而 JUnit4 已经超过 10 年了,因此不建议使用。据我所知,虽然java进化了这么多,但这段时间一直没有更新。我认为这就是 spring 初始化程序强制使用 junit-jupiter-engine 的原因。