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

新手上路,请多包涵

我在我的测试中使用 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 注释以使测试再次工作?

原文由 IKo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 829
2 个回答

In a general way, what you did with @Rule and @ClassRule in JUnit 4 should be done with @ExtendWith and Extension that associated provide a JUnit 5 中非常接近的功能。

它作为标准 JUnit 生命周期挂钩工作,但它是在 Extension 类中提取的。与 @Rule 类似,可以为测试类添加所需的 Extension s。

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

  • 保持 JUnit 4 的方式(JUnit 5 拥有允许执行 JUnit 3 或 4 测试的 JUnit Vintage 部分)。
  • @Rule 重写为 Extension
  • 在类的每个测试中使用 --- WireMockRule (启动服务器,执行测试并停止服务器)进行实际处理 @BeforeEach@AfterEach hook 方法
  • 使用以 JUnit 5 扩展方式实现相当于 WireMockRule 的第三个库,例如 https://github.com/lanwen/wiremock-junit5

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

原文由 davidxxx 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

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

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

原文由 Arho Huttunen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题