gpt4 book ai didi

java - 如何在 JUnit5 中实现自定义运行器

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:30 26 4
gpt4 key购买 nike

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

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

我的代码在这里:BasicJunit5ArquillianTest.java

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

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

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

最佳答案

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

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

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

关于java - 如何在 JUnit5 中实现自定义运行器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43318585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com