Juint4源码解读

1. org是第三方公共类库包;com是企业类库包
2. Junit通过API反射的值随机运行多个test并存在同一个类中的情况
3. java.lang和java.util

一. Junit
1. 宏观架构:
junit.textui是junit运行时的入口;
junit.runner包含支持单元测试运行的一些基础类以及自己的类加载器;
junit.framework包含编写一般junit单元测试必须用到的Junit类
junit.extensions对framework包再功能上的一些必要扩展以及为更多的功能扩展留下的接口

2. Junit中使用的java设计模式--参考《Junit设计模式分析》
组合模式-composite
装饰模式-decorate 
观察者模式-完成单元测试结果的自动更新-observer 
命令模式-command 

3. JunitRunner 包,提供自己的测试类加载,使用反射机制将测试类加载,读取properties文件的操作

4. junit中体现的比较明显的3种设计模式
Composite 模式、Command 模式以及 Observer 模式

5. Junit的完成生命周期:初始化阶段(将testXXX变成testCase,然后加入testSuite中)、运行阶段(运用testRunner运行testSuite)和结果获取阶段(testResult)
6. testSuite/testRunner/testResult

一、初始化
7. testSuite采用了composite设计模式。 在该模式下,可以将 TestSuite 比作一棵树,树中可以包含子树(其它 TestSuite),也可以包含叶子 (TestCase),以此向下递归,直到底层全部落实到叶子为止。 JUnit 采用 Composite 模式维护测试集合的内部结构,使得所有分散的 TestCase 能够统一集中到一个或若干个 TestSuite 中,同类的 TestCase 在树中占据同等的位置,便于统一运行处理。另外,采用这种结构使测试集合获得了无限的扩充性,不需要重新构造测试集合,就能使新的 TestCase 不断加入到集合中。
private  Vector<Test>  fTests =  new  Vector<Test>(10) 内部维护的子树或树叶的列表;每一个run命令所需执行的所有测试Test

途中的代码完成提取整个类继承体系上的测试方法的提取。循环语句由 Class 类型的实例 theClass 开始,逐级向父类的继承结构追溯,直到顶级 Object 类,并将沿途各级父类中所有合法的 testXXX() 方法都加入到 TestSuite 中。

合法 testXXX 的判断工作由:
addTestMethod(each,names,theClass)完成
实际上判断成功后,转换成testCase对象,加入到了testSuite中

10. Test接口中只有两个方法,countTestCases-统计已执行的方法个数
run--执行对应的方法
实现Test接口的只有TestSuite和TestCase两个组件

将 testXXX 方法转化为 TestCase,并加入到 TestSuite 。其中,addTest 方法接受 Test 接口类型的参数,其内部有 countTestCases 方法和 run 方法,该接口被 TestSuite 和 TestCase 同时实现。这是 Command 设计模式精神的体现,

Command 模式将调用操作的对象与如何实现该操作的对象解耦。在运行时,TestCase 或 TestSuite 被当作 Test 命令对象,可以像一般对象那样进行操作和扩展,也可以在实现 Composite 模式时将多个命令复合成一个命令。另外,增加新的命令十分容易,隔离了现有类的影响,今后,也可以与备忘录模式结合,实现 undo 等高级功能。

11. Junit中的command模式,理解TestSuite添加测试类的两种方法:①. 直接添加类.class; ②.通过TestSuite添加
12. 

二、运行阶段
1. fPrinter--【ResultPrinter类的实例,提供了向控制台输出测试结果的一系列功能接口,输出的格式在类中定义。ResultPrinter类实现了TestListener接口,具体实现了addError,addFailure,endTest,startTest四个方法,这种设计是Observer设计模式的体现】监听器加入到result的监听器列表中
A: 将TestPrinter的加入到TestResult对象的监听器列表中,因此,实质上TestResult对象可以有多个监听器显示测试结果。
B. 运行TestCase并获取TestResult
StartTest和endTest是Obsever模式的两个重要消息更新
利用反射机制从TestCase中获取测试方法:runMethod = getClass().getMethod(fName,(Class[]null));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值