【单元测试】junit5框架介绍
一、参考wiki
https://blog.csdn.net/pan_junbiao/article/details/104296855
https://www.cnblogs.com/zgq123456/p/12907757.html
什么是Junit5 ?
先看来个公式:
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
这看上去比Junit4 复杂,实际上在导入包时也会复杂一些。
JUnit Platform是在JVM上启动测试框架的基础。
JUnit Jupiter是JUnit5扩展的新的编程模型和扩展模型,用来编写测试用例。Jupiter子项目为在平台上运行Jupiter的测试提供了一个TestEngine (测试引擎)。
JUnit Vintage提供了一个在平台上运行JUnit 3和JUnit 4的TestEngine 。
https://blog.csdn.net/hqq2023623/article/details/78464877 测试引擎的介绍
二、JUnit5的启动过程
1、启动过程示意
启动的main方法入口:com.intellij.rt.execution.junt.JunitStarter 这个类是idea程序的类入口。
到junit5框架的时候,已经是JunitStarter组装了使用junit5的代码。具体代码示意如下
public static void main(String[] args) {
//设置搜索和过滤规则
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(
selectPackage("zj"),
selectClass(*MyTest.class)
)
.filters(
includeClassNamePatterns(".*Tests")
)
.build();
Launcher launcher = LauncherFactory.create();
// Register a listener of your choice
//通过监听器来监听获取执行结果
TestExecutionListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(request);
}
1. 构造LauncherDiscoveryRequest指定测试类的查找和过滤规则
2. 通过 LauncherFactory.create() 来获取Launcher默认实现
3. 通过添加TestExecutionListener来进行测试结果的监听
4. 执行launcher.execute(req)方法启动测试
简单来说就是扫描注定的文件夹或找到指定类名的类,经过Filter过滤后交给TestEngine去执行
2、启动过程涉及的类
org.junit.platform.engine.DiscoverySelector
负责定义哪些资源可以被TestEngine用来寻找测试类,比如指定java类名或者指定目录路径
org.junit.platform.engine.Filter
作为TestEngine的过滤器,过滤DiscoverySelector发现的资源
org.junit.platform.launcher.LauncherDiscoveryRequest
使用不同的Filter定义了Launcher和TestEngine以及测试类的过滤规则,使用DiscoverySelector发现测试类
TestEngine
作为发现和执行符合LauncherDiscoveryRequest规则的测试的主要组件,对不同的编程模型可以实现自己的TestEngine,比如JupiterTestEngine
TestEngine在创建Launcher的时候通过JAVA SPI发现具体实现,JUnit5中有两种实现 :JupiterTestEngine 和 VintageTestEngine
org.junit.platform.launcher.TestExecutionListener
定义了测试执行期间发生的事件类型,注册到Launcher的实现类将会在事件发生时得到通知
org.junit.platform.launcher.Launcher
org.junit.platform.launcher.DefaultLauncher
做为Launcher的默认实现,持有TestEngine和TestExecutionListener集合,它们通过JAVA SPI发现,负责执行TestEngine来启动测试

浙公网安备 33010602011771号