测试套件在 JUnit5 中是否被认为已弃用?
Are test suites considered deprecated in JUnit5?
我正在尝试使用 JUnit5 创建测试套件。经过一些研究后,我无法断定它是否是受支持的功能。
official user guide 仅提及与 JUnit 4 向后兼容的套件。
这是 JUnit 4 中的做法:
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class})
public class TestSuite {
}
这是否意味着,测试套件现在已被弃用,或者相同的概念是否仍然可以使用其他名称?
Does this mean, that Test Suites are considered deprecated now, or is the same concept still available under another name?
苦套房答:
JUnit 5 中实际上支持测试套件,但几乎可以肯定这不是您想要的。但是,JUnit 团队正在研究可能满足您需求的东西。
详细答案:
从 JUnit 5.2 开始,对 suites 的唯一内置支持是通过 JUnitPlatform
Runner(通过注册@RunWith(JUnitPlatform.class)
)。该运行器实际上启动了 JUnit 平台(a.k.a., JUnit 5 基础设施)并允许您针对各种编程模型(例如 JUnit 4 和 JUnit Jupiter)执行测试。它还允许您 select 各种东西(例如,类、包等)并配置包含和排除过滤器(例如,用于标签或测试引擎)。
runner 的问题是它不能直接在 JUnit 平台上执行。它 只能 单独使用 JUnit 4 执行。这意味着您失去了 JUnit 平台的完整报告功能,因为信息在从 JUnit 平台到 JUnit 4 的转换过程中丢失了。
总而言之,从技术上讲,您可以使用 JUnitPlatform
运行器来执行使用 JUnit 5 的套件,测试将执行,但 IDE 中的报告和显示将不是最佳选择。
好的一面是,JUnit 团队计划为 JUnit 5 中的套件提供内置支持,而不会受到 JUnit 4 JUnitPlatform
运行器缺点的影响。有关详细信息,请参阅所有问题分配给 "suites" label on GitHub.
此外,已经有一个feature branch that you can check out which can be consumed in a Maven or Gradle build via JitPack。
此致,
Sam(JUnit 5 核心提交者)
测试套件现在可以 运行 与 JUnit 5 套件引擎(从版本 5.8.0 开始)。
// Aggregator dependency for junit-platform-suite-api and junit-platform-suite-engine
implementation("org.junit.platform:junit-platform-suite:1.8.1")
这是 Kotlin 的代码(将 ::class
替换为 .class
用于 Java):
import org.junit.platform.suite.api.*
@Suite
@SelectClasses(MyTestClass1::class, MyTestClass2::class)
@SelectPackages("...")
@SelectDirectories("...")
class MyTestSuite
The deprecation of JUnitPlatform runner:
The introduction of @Suite support provided by the junit-platform-suite-engine module makes the JUnitPlatform runner obsolete. See JUnit Platform Suite Engine for details.
我正在尝试使用 JUnit5 创建测试套件。经过一些研究后,我无法断定它是否是受支持的功能。
official user guide 仅提及与 JUnit 4 向后兼容的套件。
这是 JUnit 4 中的做法:
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class})
public class TestSuite {
}
这是否意味着,测试套件现在已被弃用,或者相同的概念是否仍然可以使用其他名称?
Does this mean, that Test Suites are considered deprecated now, or is the same concept still available under another name?
苦套房答:
JUnit 5 中实际上支持测试套件,但几乎可以肯定这不是您想要的。但是,JUnit 团队正在研究可能满足您需求的东西。
详细答案:
从 JUnit 5.2 开始,对 suites 的唯一内置支持是通过 JUnitPlatform
Runner(通过注册@RunWith(JUnitPlatform.class)
)。该运行器实际上启动了 JUnit 平台(a.k.a., JUnit 5 基础设施)并允许您针对各种编程模型(例如 JUnit 4 和 JUnit Jupiter)执行测试。它还允许您 select 各种东西(例如,类、包等)并配置包含和排除过滤器(例如,用于标签或测试引擎)。
runner 的问题是它不能直接在 JUnit 平台上执行。它 只能 单独使用 JUnit 4 执行。这意味着您失去了 JUnit 平台的完整报告功能,因为信息在从 JUnit 平台到 JUnit 4 的转换过程中丢失了。
总而言之,从技术上讲,您可以使用 JUnitPlatform
运行器来执行使用 JUnit 5 的套件,测试将执行,但 IDE 中的报告和显示将不是最佳选择。
好的一面是,JUnit 团队计划为 JUnit 5 中的套件提供内置支持,而不会受到 JUnit 4 JUnitPlatform
运行器缺点的影响。有关详细信息,请参阅所有问题分配给 "suites" label on GitHub.
此外,已经有一个feature branch that you can check out which can be consumed in a Maven or Gradle build via JitPack。
此致,
Sam(JUnit 5 核心提交者)
测试套件现在可以 运行 与 JUnit 5 套件引擎(从版本 5.8.0 开始)。
// Aggregator dependency for junit-platform-suite-api and junit-platform-suite-engine
implementation("org.junit.platform:junit-platform-suite:1.8.1")
这是 Kotlin 的代码(将 ::class
替换为 .class
用于 Java):
import org.junit.platform.suite.api.*
@Suite
@SelectClasses(MyTestClass1::class, MyTestClass2::class)
@SelectPackages("...")
@SelectDirectories("...")
class MyTestSuite
The deprecation of JUnitPlatform runner:
The introduction of @Suite support provided by the junit-platform-suite-engine module makes the JUnitPlatform runner obsolete. See JUnit Platform Suite Engine for details.