基本组件
TestCase:测试用例实例
TestSuite:套件执行测试用例
TestRunner:继承了BaseTestRunner,该类实现了TestListener
TestRunner的实现类
org.junit.runners.JUnit4:Junit4的测试运行器
org.junit.runners.Parameterized:使用不同参数来运行相同测试集的运行器
org.junit.runners.Suite:包含不同测试的容器
TestListener:监听测试过程及结果
addError
addFailure
endTest
startTest
Junit测试报告
明确测试报告模板及需要收集到的测试数据信息
工程中的template文件
写模板的代码基本固定
ReportInfo类定义了报告要收集的具体信息
自定义Runner:ReportRunner.java,继承BlockJUnit4ClassRunner重写run方法,run方法接受RunNotifier作为入参,并添加自定义监听器JunitExecutionListener;
自定义Listener:JUnitExecutionListener.java继承RunListener,重写其中的相关方法进行不同测试过程、结果的统计;
测试类添加Runwith注解@RunWith(ReportRunner.class)
(备注:工程根目录下:template为报告模板文件,运行TestReport测试类后得到的report.html,在JUnitExecutionListener的testRunFinished中通过邮件发送)
测试类实例 后处理
BeforeAll 回调
测试及容器执行条件检查
BeforeEach 回调
参数解析
测试执行前
测试执行后
异常处理
AfterEach 回调
AfterAll 回调
接口及说明
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
不能与@MethodSource注解一起使用
嵌套单元测试
任意嵌套内部类
将测试限制在同一个类中
@ParameterizedTest
各类型source
Consuming Arguments
@TestInstance
配置测试实例生命周期,参看TestDefaultMethod
具体参见 junit5官网