【问题标题】:Difference between junit-jupiter-api and junit-jupiter-enginejunit-jupiter-api 和 junit-jupiter-engine 的区别
【发布时间】:2018-07-05 00:34:56
【问题描述】:

maven 模块junit-jupiter-api 和junit-jupiter-engine 有什么区别?是否需要在build.gradle 中包含这两个依赖项?

我需要同时提供这两个依赖项吗?

testCompile("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
testCompile("org.junit.jupiter:junit-jupiter-api:${junitVersion}")

或者只有一个依赖就足够了?

testCompile("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")

我需要添加对junit-vintage-engine的依赖吗?

【问题讨论】:

  • 小改进:JUnit 团队的建议是两个引擎都使用testRuntime。

标签: java junit junit5


【解决方案1】:

JUnit 5.4 之前的版本

来自the docs:

junit-jupiter-api

用于编写测试和扩展的 JUnit Jupiter API。

junit-jupiter-engine

JUnit Jupiter 测试引擎实现,仅在运行时需要。

junit-vintage-engine

JUnit Vintage 测试引擎实现允许在新的 JUnit 平台上运行老式 JUnit 测试,即以 JUnit 3 或 JUnit 4 风格编写的测试。

所以...

  • 您需要 junit-jupiter-api 和 junit-jupiter-engine 来编写和运行 JUnit5 测试
  • 您只需要 junit-vintage-engine 如果 (a) 您使用 JUnit5 并且 (b) 您的测试用例使用 JUnit4 构造/注释/规则等

JUnit 从 5.4 版开始

在 JUnit 5.4 中,这已被简化,有关详细信息,请参阅 this answer。

【讨论】:

  • 您不需要同时添加两者,因为jupiter-api 是jupiter-engine 的传递依赖项。
  • 在 5.5.1 版本中,我只能使用“junit-jupiter-api”编写和运行 junit 测试。
  • @gaurav,是的,这在我的答案的这一部分中有所介绍注意:在 JUnit 5.4 中,这是简化的,有关更多详细信息,请参阅 this answer。
  • @glytching,但@Gaurav(和我)只使用junit-jupiter-api,而不是junit-jupiter
【解决方案2】:

junit-jupiter聚合器神器

JUnit 5.4 provides 如果您的意图是编写 JUnit 5 测试,则 Maven 配置要简单得多。只需指定名为 junit-jupiter 的聚合工件。

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.8.1</version>
    <scope>test</scope>
</dependency>

为了您的方便,这个工件依次自动提取以下三个工件:

在您的项目中,您还会得到:

  • junit-platform-commons-1.4.0.jar
  • junit-platform-engine-1.4.0.jar

以上内容是您基于新的 Jupiter 范例编写和运行 JUnit 5 测试所需要的。

旧版测试

如果您的项目有想要继续运行的 JUnit 3 或 4 测试,请为 JUnit Vintage Engine 添加另一个依赖项,junit-vintage-engine。见tutorial by IBM。

<!-- https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine -->
<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <version>5.8.1</version>
    <scope>test</scope>
</dependency>

【讨论】:

  • 我认为这是最好的答案。
【解决方案3】:

请注意,junit-jupiter-api 作为子依赖项包含在 junit-jupiter-engine Maven 存储库中。因此,您只需要添加junit-jupiter-engine 即可获得两者。我敢肯定 gradle 是一样的。 https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine/5.1.1

【讨论】:

  • 现在在 JUnit 5.4 及更高版本中简化为 &lt;artifactId&gt;junit-jupiter&lt;/artifactId&gt;。
【解决方案4】:

您的问题的最准确答案在junit-team/junit5-samples 存储库中。只需看看 junit5-jupiter-starter-gradle for Gradle 和 junit5-jupiter-starter-maven for maven。

正如您在两个示例中看到的,唯一需要的依赖项是junit-jupiter。

【讨论】:

    【解决方案5】:

    如果你想使用 Junit 5 运行测试,你只需要junit-jupiter-api。如果您同时使用junit-jupiter-engine,您的测试将会中断并且不会运行。

    我不确定为什么要放置它,但是,前面的答案告诉您需要同时使用两者是不正确的。

    【讨论】:

      猜你喜欢
      • 2020-03-30
      • 2020-10-09
      • 2021-05-30
      • 2020-07-19
      • 2017-12-23
      • 2021-10-09
      • 2019-06-08
      • 1970-01-01
      • 2018-10-10
      相关资源
      最近更新 更多