【问题标题】:How to AND JUnit5 tags with Maven如何使用 Maven 与 JUnit5 标记
【发布时间】:2019-10-25 14:30:16
【问题描述】:

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

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

我们目前正在从命令行运行我们的测试,以便让测试人员控制每次运行:

mvn test -Dgroups=app1,fast

我们遇到的问题是上面将运行所有标记为app1fast 的测试。结果是运行了几十个测试。测试人员的目标是只为“app1”运行“快速”测试。

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

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

Surefire 是否可以将 JUnit5 标记与 ANDing 一起使用?

【问题讨论】:

    标签: java maven junit5 maven-surefire-plugin


    【解决方案1】:

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

    mvn test -Dgroups="app1&fast"
    

    mvn test -Dgroups="app1|fast"
    

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

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

    【讨论】:

    • 我们在使用与 Failsafe 版本 3.0.0-M3 相同的语法时遇到了问题。我们会进一步调查。
    【解决方案2】:

    我所做的就是设置界面。如果有子组,我只是让接口扩展父组。

    对于您的情况,您似乎有 app1 标记,并且其中一些测试标记得很快。为 app1 创建接口,为快速扩展 app1 创建另一个接口。在您的测试中,您可以添加 @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 也一样。

    希望对您有所帮助。

    【讨论】:

    • 我认为您的答案与 JUnit 4 有关,而问题与 JUnit 5 有关。JUnit 5ˋs 标签是基于字符串而不是基于类。
    • 这是基于 JUnit 4 的。
    • 啊!我完全错过了一些方法。
    猜你喜欢
    • 2017-07-14
    • 2018-12-10
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多