【问题标题】:Running JUnit 4 tests (under Vintage execution engine) with JUnit 5 @Tag使用 JUnit 5 @Tag 运行 JUnit 4 测试(在 Vintage 执行引擎下)
【发布时间】:2020-05-26 13:55:10
【问题描述】:

目前,据我所知,Cucumber 支持通过老式执行引擎在 JUnit 5 上运行。

假设我有以下测试运行器:

@RunWith(Cucumber.class)
@CucumberOptions(plugin = { "pretty", "html:target/cucumber" },
                 features={ "src/test/resources" },
                 strict = true)
@Tag("ACCEPTANCE_TEST") 
public class TestRunner { }

如果我在 JUnit 5 中使用定义为“ACCEPTANCE_TEST”的标记表达式运行它,它将不会被拾取并运行。

但是,如果我使用定义为 NOT 的表达式运行它(这对于测试类来说是正确的),例如"!UNIT_TEST" 然后它将被拾取并运行。

如何将 JUnit 5 标记与 JUnit 4 测试运行器(例如上面的那个)混合,以便它适用于标记表达式的正匹配?

【问题讨论】:

    标签: junit junit4 junit5 cucumber-junit


    【解决方案1】:

    TLDR

    你不能。

    仍然是 TLDR

    你不能,至少不能不重新实现 Cucumber 的 JUnit4 运行器的大部分功能。

    长篇大论

    要理解为什么,你必须掌握一些术语的不同之处:

    • JUnit 4:单个模块(jar 文件),包含测试编写 API、测试执行器、运行测试的 API 以及至少两种不同的扩展机制(规则和运行器)。
    • Cucumber JUnit4 runner:Cucumber 与 JUnit 4 集成的方式。通过@RunWith(Cucumber.class) 激活
    • JUnit 5:运行不同测试引擎的平台,包含几个模块并提供供 IDE 和构建工具使用的 API,以及用于插件测试引擎的 SPI
    • Vintage:在 JUnit 5 平台中使用 JUnit 4 的测试引擎
    • Jupiter:与 JUnit 5 平台同步发展并由同一团队维护的新测试引擎。

    事情是这样的:@Tag 注释是 Jupiter 的一项功能,不可能与 Cucumber 的 JUnit 4 运行器一起使用。 JUnit 5 使用 Cucumber 的方法是 Cucumber 测试引擎:https://github.com/cucumber/cucumber-jvm/tree/master/junit-platform-engine。 AFAIU 它有自己的标记机制并且不使用@Tag,因为不同的测试引擎并行工作但不共享功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多