如何在JUnit 5中替换WireMock@Rule注释?

2022-08-31 11:52:56

我在测试中使用WireMock,并且有这样一行代码:

@Rule
public WireMockRule wireMockRule = new WireMockRule(8080);

我想切换到 JUnit 5。所以我添加了下一个依赖项(使用Gradle):

testCompile('org.junit.jupiter:junit-jupiter-engine:5.1.1')

但是当我尝试导入注释时,没有任何建议。@Rule

我是否需要添加另一个 JUnit 依赖项模块?或者 JUnit 5 中是否不支持规则?如果没有,如何替换注释以使测试再次工作?@Rule


答案 1

一般来说,您在 JUnit 4 中执行的操作应该使用@ExtendWith和扩展来完成,这些扩展在 JUnit 5 中提供了非常接近的功能。
它作为标准的 JUnit 生命周期挂钩工作,但它是在类中提取的。与 类似,可以为一个测试类添加尽可能多的 s。@Rule@ClassRuleExtension@RuleExtension

要处理该问题,您有几种可能的方法:

  • 保持 JUnit 4 的方式(JUnit 5 拥有 JUnit Vintage 部分,允许执行 JUnit 3 或 4 测试)。
  • 将 重写为 .@RuleExtension
  • 在类和钩子方法的每个测试中执行(启动服务器,执行测试和停止服务器)完成的实际处理。WireMockRule@BeforeEach@AfterEach
  • 使用第三个库,该库在JUnit 5扩展方式中实现了与WireMockRule等效的库,例如 https://github.com/lanwen/wiremock-junit5

请注意,您的问题已在 JUnit 5 问题中讨论过。


答案 2

JUnit 4 注释,在 JUnit 5 中不存在。基本上,有一个新的扩展模型可用于实现具有相同功能的扩展。这些扩展名可以与批注一起使用。@Rule@ClassRule@ExtendWith

junit-jupiter-migrationsupport 模块中 JUnit 4 规则的子集的迁移支持有限。不幸的是,它仅限于 和 的子类。ExternalResourceVerifier

在 wiremock 正式支持 JUnit 之前,您有一些解决方法:

  1. 使用 junit-vintage 引擎将 JUnit 4 测试与 JUnit 5 测试并排运行。
  2. 在测试代码中自行启动和停止服务器。
  3. 使用第三方扩展,如 wiremock-junit5wiremock-extension

推荐