原创 | TDD 工具集:JUnit、AssertJ 和 Mockito (二十一) 编写测试 - 动态测试
重要性:★★☆☆☆
注解为@Test
的测试方法是静态的,因为其行为是在编译时完全决定的,不能在运行时进行修改。Assumptions
(假设)提供了一定程度的动态行为(根据运行时环境条件动态调整测试执行)。
JUnit Jupiter提供了一种新的测试编程模型。可以通过注解了@TestFactory
的测试工厂方法在运行时生成动态测试。
技术上而言,@TestFactory
测试工厂方法必须返回单个的DynamicNode
实例,或由DynamicNode
组成的Stream,
Collection,
Iterable,
Iterator或数组。DynamicNode
有两个可实例化的子类:
DynamicContainer
和DynamicTest
。DynamicContainer
包括一个显示名和一组动态的子节点,能够用来创建任意多层的嵌套动态节点树。DynamicTest
实例将被延迟执行,能够动态地甚至非确定性地生成测试用例。
@TestFactory
返回的任何流将由JUnit通过调用Stream.close()
正常关闭,因此使用类似Files.lines()
这样的资源是安全的。
跟@Test
方法一样,@TestFactory
方法也必须是非private、非静态的,可以包含能够通过参数解析器解析的参数。
DynamicTest
是由测试工厂方法在运行时生成的测试用例,它由一个显示名和一个Executable
组成。
与@Test
不同,生命周期方法是针对整个@TestFactory
测试工厂方法的,而不是针对测试工厂方法生成的每个测试用例。也就是说,模板方法生成的多个测试用例共享相同的测试类实例,一个测试用例修改了测试类的状态可能会影响下一个测试用例,因此必须小心对待。
详细的动态测试代码演示戳这里↓↓↓
原创 | TDD工具集:JUnit、AssertJ和Mockito (二十一)编写测试-动态测试
本文相关开源代码戳这里下载↓↓↓
如果觉得有收获,点个【赞】鼓励一下呗!
版权声明: 本文为 InfoQ 作者【编程道与术】的原创文章。
原文链接:【http://xie.infoq.cn/article/a6ccc477384a6cd5bc11fbae2】。文章转载请联系作者。
评论