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

38

这是一个双重问题:

  1. junit-vintage-enginejunit-jupiter-engine之间有什么区别?
  2. SpringBoot启动器项目排除了junit-vintage-engine。这是为了强制使用junit-jupiter-engine吗?

以下是由Spring Initializr生成的我的SpringBoot项目的依赖关系:

        <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>

从Spring Boot 2.4版本开始,spring-boot-starter-test中已经移除了junit-vintage-engine。因此不再需要显式排除它。https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.4-Release-Notes - undefined
3个回答

44

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

假设您将为新的Spring Boot项目编写仅使用JUnit 5的测试,因此在POM中默认排除了vintage引擎的依赖。

参考资料:

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


7

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

junit-vintage-engine:

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

junit-jupiter-engine:

  • 用于Junit-5测试
  • 提供一些API,有助于编写测试案例。
  • 'Assertions' 提供了有用的断言方法进行测试条件判断。
  • 'Assumptions' - 实用方法基于假设提供条件。
  • 更改注解名称的一点,如 @Disable、@BeforeAll、@BeforeEach 等...

回答:2. 我也很惊讶他们仍然提供旧版的 vintage 库,可能有一些原因我目前还不知道,但根据当前使用情况,我们将在下一个更新中看到。

祝您拥有愉快的一天! :)


1

第一个问题也与JDK版本有关。要使用jupiter引擎,您必须拥有Java 8或更高版本。对于第二个问题,由于vintage引擎适用于JUnit4,而JUnit4已经超过10年了,因此不建议使用。据我所知,尽管Java已经发展了这么多,但它在这段时间内没有得到更新。我认为这就是为什么Spring Initializers强制使用junit-jupiter-engine的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接