使用JUnit5@Tag运行JUnit4测试(在Vintage执行引擎下)

使用JUnit5@Tag运行JUnit4测试(在Vintage执行引擎下),junit,junit4,junit5,cucumber-junit,Junit,Junit4,Junit5,Cucumber Junit,目前,据我所知,Cucumber支持通过vintage执行引擎在JUnit5上运行 假设我有以下测试运行程序: @RunWith(Cucumber.class) @CucumberOptions(插件={“pretty”,“html:target/cucumber”}, features={“src/test/resources”}, 严格=正确) @标签(“验收试验”) 公共类TestRunner{} 如果我使用JUnit5中定义为“ACCEPTANCE_TEST”的标记表达式来运行它,它将

目前,据我所知,Cucumber支持通过vintage执行引擎在JUnit5上运行

假设我有以下测试运行程序:

@RunWith(Cucumber.class)
@CucumberOptions(插件={“pretty”,“html:target/cucumber”},
features={“src/test/resources”},
严格=正确)
@标签(“验收试验”)
公共类TestRunner{}
如果我使用JUnit5中定义为“ACCEPTANCE_TEST”的标记表达式来运行它,它将不会被拾取并运行

但是,如果我使用定义为NOT的表达式(对于测试类来说是正确的)运行它,例如“!UNIT_test”,那么它将被拾取并运行

如何将JUnit 5标记与JUnit 4测试运行程序(如上面的一个)混合使用,以使其与标记表达式正匹配?

TLDR 你不能

仍然是TLDR 你不能,至少不能不重新实现Cucumber的JUnit4跑步者的大部分功能

长话短说 要理解原因,您必须掌握一些术语的差异:

  • JUnit4:一个模块(jar文件),包含测试编写API、测试执行器、运行测试的API,以及至少两种不同的扩展机制(规则和运行器)
  • Cucumber JUnit4 runner:Cucumber与JUnit4整合的方式。通过
    @RunWith(Cucumber.class)
  • JUnit5:一个运行不同测试引擎的平台,包含几个模块,提供一个供IDE和构建工具使用的API,以及一个用于插件测试引擎的SPI
  • Vintage:在JUnit5平台中使用JUnit4的测试引擎
  • Jupiter:与JUnit5平台同步发展的新测试引擎,由同一团队维护
事情是这样的:
@Tag
注释是Jupiter特性,不可能与Cucumber的JUnit4 runner一起工作。JUnit 5使用Cucumber的方法是Cucumber测试引擎:。AFAIU有自己的标记机制,不使用
@Tag
,因为不同的测试引擎并排工作,但不共享功能