【问题标题】:What is a container in JUnit 5JUnit 5 中的容器是什么
【发布时间】:2020-03-03 12:32:31
【问题描述】:

当前的https://junit.org/junit5/docs/current/user-guide 使用术语容器大约 50 次,但未对其进行定义。

测试类和容器有什么区别?一个容器可以属于多个类吗?一个类可以有多个容器吗? (例如嵌套类)。

【问题讨论】:

标签: java junit5


【解决方案1】:

让我作为 JUnit 5 团队的原始成员之一插话...

JUnit 5 作为一个平台,允许深度嵌套的容器和测试树。您甚至可以拥有既是测试(= 单独运行它很有意义)又是容器(= 它有子节点)的节点。任何测试引擎的测试树的根始终是引擎容器。 有一件重要的事情要知道:没有子节点且本身不是测试的容器将被修剪并且不会运行!

至于 Jupiter,您将类和嵌套类作为容器,将测试方法作为测试。不过,考虑一下动态测试的情况,我认为带注释的方法是一个测试,但它也会创建很多本身就是测试的子代。所以它也是一个容器。

其他测试引擎也可能决定为包和父包创建容器。

【讨论】:

  • 谢谢约翰斯!一些后续问题:1)在测试/容器方面如何处理BeforeAll/BeforeEach等方法? 2) API 中一定有一些类/接口与这个测试/容器范式相关,你能指点我吗?
  • 据我所知 HierarchicalTestEngine 包含了所有的抽象执行逻辑。生命周期注释在恢复阶段得到解决。但在我没有查看代码的过去两年中,这一切可能都发生了变化。
【解决方案2】:

我想这里的容器是包含测试的东西:))

如果您在任何侦听器中调试 executionStarted 方法,您将看到名为“[engine:junit-jupiter]”的顶级容器(对于标准运行程序,或您正在使用的任何其他引擎名称)。

然后你会看到一个测试类(每个都是容器)。如果您使用“嵌套”(我的意思是 @Nested 测试)功能,您的上层测试也将显示为容器。

您可以通过创建自己的引擎和覆盖测试发现机制来添加更多级别。

【讨论】:

  • 是的,这是我的“基本”理解。但我只是想知道,与测试类有什么区别,为什么是新术语容器。如果整个运行始终是一个容器,其中包含测试类(容器),其中包含测试 - 就是这种区别的一个很好的例子。还有更多吗? BeforeEach 是“测试”的一部分还是属于容器?最重要的是?
  • BeforeEach 不是测试的一部分——它是一个“回调”。它不属于容器。 Junit 5 是作为一组 API 构建的。平台是开放的。因此,正如我所说,您可以使用容器的另一个定义(!=TestClass)来实现自己的引擎。我认为,获得最佳答案的正确位置是 Junit Team gitHub :)
  • 这很有趣。所以可能有代码,它既不是测试的一部分,也不是容器的一部分。如果这部分失败(断言或异常)会发生什么 - 报告应该如何工作?我实际上已经创建了这个问题,要求解释 ;-) github.com/junit-team/junit5/issues/2205
  • 我已经解决了(从基础代码报告)。有点复杂,使用额外的监听器。你有这个问题吗?
  • 另一个很好的例子;)。使用@Parametrized 运行时,您的测试方法将成为容器,并且具有特定排列的每次调用都会变成它的子项。
【解决方案3】:

测试类基本上是一个简单的 java 类,您可以在其中编写所有测试用例/方法(带有 @Test 注释)。


测试容器是一种沙盒,您的测试用例将在其中运行。这 @RunWith 注释创建用于模拟的测试容器。

做类似的事情:


@RunWith(SpringJUnit4ClassRunner.class)
public class Test {
@Test
public void test(){
//your test
}
}

SpringJUnit4ClassRunner 允许您在容器中部署测试。

下面提到了其他流行的测试容器。

  1. MockitoJUnitRunner
  2. HierarchicalContextRunner
  3. Avh4 的嵌套
  4. NitorCreation 的 NestedRunner
  5. 阿奎利安

【讨论】:

  • 问题是关于 JUnit5 的答案对 JUnit4 有何帮助?
猜你喜欢
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 2017-10-18
  • 2019-02-04
  • 1970-01-01
  • 2019-03-04
相关资源
最近更新 更多