文章目录
引言
一直想要完整的阅读一份框架的源码,JUnit3.8.1除了UI界面代码之后只有2000多行代码,非常适合刚开始阅读源码的人,避免刚开始就想放弃
环境
静态的代码阅读总是没有一个完整的逻辑线,因为最好能够搭建在环境将源码带跑起来,然后通过debug找到完整的调用路径。
遇到的问题:
为了将源代码运行起来,从网上下载了Junit3.8.1的源代码,发现是采用Ant1.4构建的,在官网上已经找不到Ant1.4版本了,同时项目中使用的是IDEA,IDEA也无法对其源代码进行构建,所以我采取了另外的方式
解决方案:
- 新建一个Maven项目,然后在pom.xml文件中添加JUnit3.8.1的依赖,IDEA会自动将该依赖下载并添加到项目的外部依赖中
- Junit3.8.1源代码中有三个以ui结尾的包,junit.swingui、junit.awtui和textui,这三个包中都有TestRunner类,发现它中存在main方法,是程序的入口,分别将其启动起来,例如启动swingui中的TestRunner出现下面的界面就运行成功了,这样可以解决一些旧的源代码运行起来很麻烦的问题,但是出现的另外一个问题就是这个源代码输入只读文件,无法在IDEA中对其添加注释等功能,因此需要在另外的文件中进行记录。

说明:分别启动这三个包中的TestRunner,textui是直接传递参数在命令行显示测试结果,awtui和swingui都有可视化页面,但是swingui的功能更加全面,因此从swingui包中TestRunner进行介绍。
接下根据页面上的按钮分别进行功能介绍
功能介绍
Select a test class
这个按钮是界面上输出框旁第一个按钮,因为按钮名称过长显示“…”,将鼠标放上去会显示select a test class文字,看出这个按钮是用来选择一个用来单元测试的类。点击这个按钮之后会弹出一个对话框用来展示所有可选的类。主要是从ClassPath路径下选择符合规则的类。
通过TestCollector及其子类判断一个类是否是一个测试类,具体的继承结构如下:

Run
当选择了一个进行单元测试的类,就可以点击页面上的“Run”按钮进行单元测试了,这也是Junit的核心功能
首先在TestRunner中找到“Run”按钮,发现这个按钮绑定的事件监听调用了runSuite()方法
runSuite
synchronized public void runSuite() {
if (fRunner != null) {
fTestResult.stop();
} else {
setLoading(shouldReload());
reset();
showInfo("Load Test Case...");
final String suiteName= getSuiteText();
//获得测试用例
final Test testSuite= getTest(suiteName);
if (testSuite != null) {
addToHistory(suiteName);
//运行测试用例
doRunTest(testSuite);
}
}
}
JUnit中存在TestSuite和TestCase,TestSuite可以包含多个TestCase或者多个TestSuite
getTest
public static final String SUITE_METHODNAME= "suite";
public Test getTest(String suiteClassName) {
if (suiteClassName.length() <= 0) {
clearStatus();
return null;
}
Class testClass= null;
try {
testClass= loadSuiteClass(suiteClassName);
} catch (ClassNotFoundException e) {
String clazz= e.getMessage();
if (clazz == null)
clazz= suiteClassName;
runFailed("Class not found \""+clazz+"\"");
return null;
} catch(Exception e) {
runFailed("Error: "+e.toString());
return null;
}
Method suiteMethod= null;
try {
//获得定义的suite方法
suiteMethod= testClass.getMethod(SUITE_METHODNAME, new Class[0]);
} catch

本文详细介绍了如何在IDEA中运行JUnit3.8.1源码,并逐步解析其核心功能,包括TestRunner、TestSuite、TestCase和TestResult的运行流程。通过分析源码,读者将了解如何选择测试类、运行测试以及测试结果的处理机制。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



