8

是否有某种方法可以完全控制 JUnit5 中测试方法(包括之前/之后方法)的执行,类似于 JUnit4 @RunWith 注释)?

我正在尝试构建一个 JUnit5 Arquillian 扩展,但由于 Aquillian 基本上需要在容器中执行每个测试,所以在从 Junit5 扩展运行 Arquillian 时遇到了问题。

我的代码在这里:BasicJunit5ArquillianTest.java

测试应该在单独的容器中运行所有方法(包括之前/之后),该容器可以是单独的 JVM、远程或嵌入式服务器或任何隔离的东西。我的扩展从 beforeEach 挂钩运行测试方法,使用 Arquillian 传输测试类并使用LauncherFactory.create()在容器中运行它,收集测试结果并将它们传回。

问题是测试方法被执行了两次——通过正常的 JUnit5 执行和通过我的来自 beforeEach 钩子的 Arquillian 扩展。我只想通过 Arquillian 运行测试并跳过方法的正常执行。

这在 JUnit5 扩展中是否可行?或者我需要创建一个自定义测试引擎,可能扩展 Jupiter 测试引擎?

4

1 回答 1

5

没有扩展点(还没有?)允许您定义测试在何处或如何运行。这对于线程来说已经是正确的,这意味着无法在 JavaFX 应用程序线程或 Swing EDT 上运行它们。

您可能需要更深入地实现引擎,但这意味着用户必须在编写 Arquillian 测试或编写 Jupiter 测试之间做出选择。

更新:在接受此答案后发布的较新版本的 JUnit 5 中,JUnit 5 现在提供InvocationInterceptor扩展点,这正是实现自定义运行器作为扩展所需要的,它可以完全控制测试的方式执行,甚至可以用完全不同的东西替换测试方法的主体(例如在不同的 JVM 中运行测试并返回结果)。

于 2017-04-10T09:55:11.847 回答