junit-jupiter-api 和 junit-jupiter-engine 的区别
Posted
技术标签:
【中文标题】junit-jupiter-api 和 junit-jupiter-engine 的区别【英文标题】:Difference between junit-jupiter-api and 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
。
【参考方案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-jupiter-api
(编译依赖)
junit-jupiter-params
(编译依赖)
junit-jupiter-engine
(运行时依赖)
在您的项目中,您还会得到:
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 及更高版本中简化为<artifactId>junit-jupiter</artifactId>
。【参考方案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
,您的测试将会中断并且不会运行。
我不确定为什么要放置它,但是,前面的答案告诉您需要同时使用两者是不正确的。
【讨论】:
以上是关于junit-jupiter-api 和 junit-jupiter-engine 的区别的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 1.5.10,Gradle 7.0.2_2 - 找不到方法 testCompile() group=org.junit.jupiter,name=junit-jupiter-api,ve
Junit测试出现异常:Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.com