基本组件
TestCase:测试用例实例
TestSuite:套件执行测试用例
TestRunner:继承了BaseTestRunner,该类实现了TestListener
TestRunner的实现类
TestListener:监听测试过程及结果
Junit测试报告
明确测试报告模板及需要收集到的测试数据信息
自定义Runner:ReportRunner.java,继承BlockJUnit4ClassRunner重写run方法,run方法接受RunNotifier作为入参,并添加自定义监听器JunitExecutionListener;
自定义Listener:JUnitExecutionListener.java继承RunListener,重写其中的相关方法进行不同测试过程、结果的统计;
测试类添加Runwith注解@RunWith(ReportRunner.class)
(备注:工程根目录下:template为报告模板文件,运行TestReport测试类后得到的report.html,在JUnitExecutionListener的testRunFinished中通过邮件发送)
测试类实例 后处理
接口及说明
AfterAllCallback
定义 API 扩展,希望在调用所有测试后让测试容器执行额外的行为
AfterEachCallback
定义 API 扩展,希望在调用每个测试方法后让测试执行额外的行
AfterTestExecutionCallback
定义 API 扩展,希望在执行每个测试后让测试立即执行额外的行为
BeforeAllCallback
定义 API 扩展,希望在调用所有测试前让测试容器执行额外的行为
BeforeEachCallback
定义 API 扩展,希望在调用每个测试前让测试执行额外的行为
BeforeTestExecutionCallback
定义 API 扩展,希望在执行每个测试前让测试立即执行额外的行为
ParameterResolver
定义 API 扩展,希望在运行时动态解析参数
TestExecutionExceptionHandler
定义 API 扩展,希望处理在测试执行期间抛出的异常
扩展点的影响范围 - 类级别或方法级别
在MyExtension类中需要实现Extension接口
@ExtendWith(MyExtension.class) 完成注册
测试结果相关扩展:@ExtendWith({ ReportAnnotationParameterResolver.class,AuditServiceParameterResolver.class,EnvironmentNameParameterResolver.class })
supportsParameter总是返回true会影响其他Extensions的使用导致断言错误
注解
在编程的时候注意静态及非静态Field的差异
静态Field
类级别ExtendWith注解扩展注册后,实现类或者实例级别扩展API,如:BeforeAllCallback, AfterAllCallback, and TestInstancePostProcessor;方法级别:BeforeEachCallback
非静态Field
方法级别ExtendWith注解扩展注册后,测试类带配置@TestInstance(Lifecycle.PER_CLASS) 方法级别ExtendWith注解扩展注册前注册
组合多个注解特性的能力:通过自定义注解方式将组合的多个注解重新生成新注解
示例如下:
public @interface 注解名 (该注解名上面的多个注解)
实例:
@Nested
@ParameterizedTest
@TestInstance
具体参见 junit5官网