如何使用 Maven 与 JUnit5 标签

How to AND JUnit5 tags with Maven

有没有办法 运行 只对每个给定的标签进行测试?例如,我们可以 运行 仅使用 tag1 AND tag2 的测试吗?

我们使用带有 Surefire 2.22.2 版的 Maven 3.6.2 和 JUnit 5.5.2 对许多应用程序 API 端点进行 运行 测试。每个测试至少有 3 个标签指定测试类型、应用程序和方法类型。有些还有更多。

我们目前 运行 从命令行进行测试,让测试人员控制每个 运行:

mvn test -Dgroups=app1,fast

我们 运行 遇到的问题是上面将 运行 所有标记为 app1fast 的测试。结果是许多测试 运行。测试人员的目标是 运行 仅 "fast" 测试 "app1".

虽然可以使用 excludedGroups,但在 运行 之后这对测试人员没有帮助。此外,我们每天都在添加测试和标签,因此今天有效的方法明天可能无效。

我们的目标之一是在命令行上启用标签规范,而不需要测试人员将 POM 编辑为 运行 不同的测试组合。我们想从命令行指定我们的测试集,而不必在 运行 之间接触 POM。由于测试组合的列表不断增加,我们的 POM 将变得太大而无法有效管理。

是否可以使用 Surefire 将 JUnit5 标签与在一起?

我完成的方式是设置界面。如果有子组,我只是让界面扩展父组。

对于你的情况,你似乎有 app1 标签,其中一些测试标记得很快。为 app1 创建接口,为扩展 app1 的 fast 创建另一个接口。在您的测试中,您可以添加 @Category(app1Fast.class)

当您调用 mvn test -Dgroups=tests.groups.app1Fast 时,它将 运行 只是快速标签。如果你 运行 mvn clean test -Dgroups=tests.groups.app1 它将 运行 app1 中的所有内容。

另外,你可以看出我创建了一个名为 groups 的包来添加我的接口。

还有一个,界面会是空的-

public interface app1 {}

public interface app1Fast extends app1{}

听起来您将拥有多个应用程序 -- app1、app2 等

public interface app2{}
public interface app2Fast extends app2{}

可能还有其他方法,但这很简单。

调用 app1 以测试 app1 中的所有内容,或调用 app1Fast 仅对 app1 进行快速测试。 app2 也一样。

希望对您有所帮助。

在 Maven Surefire/Maven Failsafe 中,您可以像您已经提到的那样定义 groups,但您可以像这样为 JUnit Jupiter(又名 JUnit 5)定义它:

mvn test -Dgroups="app1&fast"

mvn test -Dgroups="app1|fast"

有关更多详细信息,请查看文档。

顺便说一句:我建议升级到 maven-surefire-plugin or maven-failsafe-plugin 的最新版本。