Junit-3.8.1源码分析01----总体概括
2018-03-22 14:48
225 查看
今天开始学习junit的源码了,Junit是一个纯Java编写的测试框架。其以简单性和易用性著称,junit 的源码设计比较合理,运用了许多的设计模式,可扩展性高,耦合性低。
我们接下来会从两个方面分析Junit源码。
1. 宏观方面。
2. 具体微观方面。
其余两个包
从该类图中,我们分析下各个类的职责。
1. 命令模式
作为辅助用户进行单元测试的框架。开发人员在使用它时,仅仅关心的是测试用例的编写。
2. 组合模式
当系统的测试用例慢慢变多是,逐个运行测试用例就成了一个棘手的问题。作为一个方便使用的测试框架。在
3. 模板模式
a77a
,比如先执行
4. 观察者模式
http://ju.outofmemory.cn/entry/137525
https://github.com/XWxiaowei/Junit_Source
我们接下来会从两个方面分析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/318318http://ju.outofmemory.cn/entry/137525
附录
junit-3.8.1 源码在:https://github.com/XWxiaowei/Junit_Source
相关文章推荐
- jQuery源码分析-01总体架构分析
- jQuery源码分析-01总体架构分析
- jQuery源码分析-01总体架构
- jQuery源码分析-01总体架构
- jQuery源码分析-01总体架构
- jQuery源码分析-01总体架构
- Junit-3.8.1源码分析02----具体分析(执行流程)
- jQuery源码分析-01总体架构
- Junit 3.8.1 源码分析(一)
- Junit 3.8.1 源码分析之两个接口
- Junit源码分析
- [android源码分析]bluetoothd service的启动的总体流程分析
- JUnit源码分析(二)
- Heritrix源码分析(七) Heritrix总体介绍
- [java][junit4][源码分析]JUnitCore-入口分析
- JUnit源码分析
- Mybatis3源码分析(01)-前期准备
- Junit源码分析
- SpringMVC源码分析(1):分析DispatcherServlet.doDispatch方法,了解总体流程
- Spring源码分析_01_ idea搭建spring源码阅读环境