JUnit 5 TestExecutionListeners 和中间容器

JUnit 5 TestExecutionListeners and intermediate containers

提问人:divad 提问时间:10/28/2022 更新时间:10/28/2022 访问量:246

问:

因此,我在 JUnit5 的 TestExecutionListener 的文档中看到了这样一句话: “与 JUnit 4 相反,测试引擎不仅应该报告表示测试计划中可执行叶子的标识符的事件,还应该报告所有中间容器的事件。” 文档链接 -> https://junit.org/junit5/docs/5.0.3/api/org/junit/platform/launcher/TestExecutionListener.html

我的问题是:什么是中间容器?

单元 JUnit 自动测试 TDD JUNIT5

评论


答:

1赞 johanneslink 10/28/2022 #1

任何 JUnit 5 测试引擎都可以确定测试树的构造方式。 A 描述此树中的一个节点,它是以下三种类型之一:TestIdentifier

  • CONTAINER
  • TEST
  • CONTAINER_AND_TEST

可以执行测试,而容器具有子项,子项本身可以是三种类型中的任何一种。

让我们看一个使用 JUnit Jupiter 的示例:

class MyTestContainer {
  @Test void test1() { }

  @Nested
  class InnerTestContainer {
     @Test void test2() { }
  }
}

运行此命令将宣布以下事件 - 可能顺序略有不同:

  • 已开始执行:MyTestContainer
  • 已开始执行:MyTestContainer.test1
  • 执行完成:MyTestContainer.test1
  • 已开始执行:MyTestContainer.InnerTestContainer
  • 已开始执行:MyTestContainer.InnerTestContainer.test2
  • 执行完成:MyTestContainer.InnerTestContainer.test2
  • 执行完成:MyTestContainer.InnerTestContainer
  • 执行完成:MyTestContainer

请记住,如何定义容器和可执行测试完全取决于测试引擎。一些 (ArchUnit) 使用成员变量进行测试,另一些则通过自己的 DSL 构建层次结构。例如,黄瓜有自己的方式来分组和嵌套特征、规格等。

希望我能澄清测试、容器和形成最终测试计划的树背后的想法。

评论

0赞 divad 10/28/2022
好。根据您的解释,中间容器用于例如示例中嵌套的“InnerTestContainer”。理解!谢谢。