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

标签 java unit-testing jboss-arquillian junit5

是否有某种方法可以完全控制 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/

相关文章:

python - 如何在 Python 中模拟 SendGrid 方法

testing - 我如何将一些 jvm 选项添加到 arquillian 测试

java - 如何在 Java 中将时间值转换为 YYYY-MM-DD 格式?

java - 如果数字是立方体,如何在 Java 中检查

c# - 用于模拟的构造函数重载错误

javascript - 使用 Jasmine 测试 Angular 服务时,脚本的包含顺序是否导致此未知提供程序错误

java - 无法运行带有嵌入式 Glassfish 的 Arquillian

testing - 多模块 Maven 项目中的 Jacoco 和 Arquillian

java - Spring Boot JPA CrudRepository - 实体不附加到 persistencecontext

java - 如何将文件中的输入放入树形图中