测试套件在 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.