当前https://junit.org/junit5/docs/current/user-guide在没有定义容器的情况下使用容器一词大约50次。
测试类和容器之间的区别是什么?一个容器可以在多个类中吗?一个类可以有多个容器吗?(例如嵌套类(。
让我作为JUnit5团队的原始成员之一插话。。。
JUnit5作为一个平台,允许容器和测试的深度嵌套树。您甚至可以拥有既是测试(=单独运行它是有意义的(又是容器(=它有子级(的节点。任何测试引擎的测试树的根始终是引擎容器。有一件重要的事情需要知道:没有孩子的容器本身也不是测试,它们将被修剪而不运行!
至于Jupiter,你有类和嵌套类作为容器,测试方法作为测试。不过,考虑一下动态测试的情况,我认为带注释的方法是一个测试,但它也会创建很多孩子,这些孩子本身就是测试。所以它也是一个容器。
其他测试引擎可能会决定为包和父包创建容器。
我想这里的容器是包含测试的东西:(
如果您在任何侦听器中调试executionStarted
方法,您将看到名为"[engine:junitjupiter]"的顶级容器(用于标准运行程序或您正在使用的任何其他引擎名称(。
然后您将看到一个测试类(每个类都是容器(。如果您使用"嵌套"(我的意思是@Nested
测试(功能,那么您的上层测试也将显示为容器。
您可以通过创建自己的引擎和覆盖测试发现机制来添加更多级别。
测试类基本上是一个简单的java类,您可以在其中编写所有测试用例/方法(使用@test注释(。
测试容器就像一个沙盒,您的测试用例将在其中运行。这个@RunWith注释创建用于模拟的测试容器。
做一些类似的事情:
@RunWith(SpringJUnit4ClassRunner.class)
public class Test {
@Test
public void test(){
//your test
}
}
SpringJUnit4ClassRunner允许您在容器中部署测试。
下面提到了其他流行的测试容器。
- MockitoJUnitRunner
- 层次结构ContextRunner
- Avh4的嵌套
- NitorCreation的NestedRunner
- Arquillian