您的位置:首页 > 其它

Junit-3.8.1源码分析01----总体概括

2018-03-22 14:48 225 查看
今天开始学习junit的源码了,Junit是一个纯Java编写的测试框架。其以简单性和易用性著称,junit 的源码设计比较合理,运用了许多的设计模式,可扩展性高,耦合性低。

我们接下来会从两个方面分析Junit源码。

1. 宏观方面。

2. 具体微观方面。

宏观方面

junit
的源码分布在
junit.awtui,junit.swingui,junit.textui,junit.runner,junit.extensions,junit.framework
, 这6个包中,其中前三个包是
junit
运行时的入口程序以及运行结果显示界面。对用户而言,这三个包中是透明的。
junit.runner
包中包含了支持单元测试的一些基础类以及自己类的加载类。其对用户而言也是透明的。

其余两个包
junit.framework
junit.extensions
,其中
junit.framework
包中包含了运行单元测试时必须用类。包括
Assert
Test
等类和接口。
junit.extensions
包则是对
junit.framework
包中的功能扩展以及更多功能的扩展预留的接口。包括了异常的扩展
ExceptionTestCase


相关包下的类图

junit.framework包下的类图



从该类图中,我们分析下各个类的职责。
Test
接口是为了统一
TestCase
TestSuite
的类型。
Assert
类提供了
junit
使用的一整套断言,其又被
TestCase
类继承。
TestListener
依赖于
Test
,实现了
Test
的监听。
TestResult
类是观察者模式中的主题角色。每个TestCase运行的时候都是用TestResult来运行的,这样才能通知每个观察者方法要开始运行了。在这里,观察者就是那些显示方式,比如Text,Swing,Awt那几种,也就是红绿条和文本显示。。
TestFailure
是测试失败的结果。

Junit 用到的相关设计模式

junit
框架用到的设计模式蛮多的。

1. 命令模式

作为辅助用户进行单元测试的框架。开发人员在使用它时,仅仅关心的是测试用例的编写。
junit
只是一个测试用例的执行器和结果查看器,不需要太多的关注框架的细节。对
junit
来说,它并不需要知道请求
TestCase
的操作信息。仅把它当作一种命令测试结果发给开发人员,命令模式正是为了达到这种松耦合的目的的。具体可以参考:设计模式学习02—-之命令模式

2. 组合模式

当系统的测试用例慢慢变多是,逐个运行测试用例就成了一个棘手的问题。作为一个方便使用的测试框架。在
junit
里面提供了
TestSuite
的功能,它允许将多个测试用例放在一个
TestSuite
里面一次执行。而且要进一步的支持在
TestSuite
中嵌套
TestSuite
的功能,使用组合模式能够很好的解决这个问题。具体可以参考:设计模式学习03—-之组合模式

3. 模板模式
junit
TestCase
这个抽象类中将整个测试的流程设置好了
a77a
,比如先执行
setUp
方法初始化测试前提,再运行测试方法,然后再
TearDown
来取消测试设置。这些具体的实现都是在子类中去实现的。

4. 观察者模式
junit
还用到了观察者模式,
TestResult
是观察者模式中的主题角色,每个
TestCase
运行的时候都是用
TestResult
来运行的,这样才能通知每个观察者方法要开始运行了,在这里,观察者就是那些显示方法。比如
Text,Swing,Awt
那几种,也就是红绿条和文本显示。具体可以参考:设计模式学习01—-之观察者模式

引用

http://blog.csdn.net/ai92/article/details/318318
http://ju.outofmemory.cn/entry/137525

附录

junit-3.8.1 源码在:
https://github.com/XWxiaowei/Junit_Source
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: