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

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

今天开始学习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包下的类图

fa9c438f3d6fc05baf2596c5e3fd8de1_70.png

从该类图中,我们分析下各个类的职责。 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这个抽象类中将整个测试的流程设置好了,比如先执行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


相关文章
|
5月前
|
存储 缓存 Java
浅析JAVA日志中的几则性能实践与原理解释
本篇文章通过几个技术点说明日志记录过程中的性能实践,计算机领域的性能往往都遵循着冰山法则,即你能看得见的、程序员能感知的只是其中的一小部分,还有大量的细节隐藏在冰山之下。
|
10月前
|
XML Java 数据格式
spring的核心技术---bean的生命周期加案例分析详细易懂
spring的核心技术---bean的生命周期加案例分析详细易懂
159 1
|
5月前
|
SQL 缓存 Java
Mybatis源码细节探究:MappedStatement和Cache对象对照关系研究
Mybatis源码细节探究:MappedStatement和Cache对象对照关系研究
|
Java 测试技术
深入探索 Java 中的 @Test 注解:优化单元测试流程的利器
在软件开发中,单元测试是保障代码质量和稳定性的重要手段之一。Java 中的 `@Test` 注解则为开发人员提供了一种方便、高效的方式来编写和执行单元测试。通过该注解,我们可以轻松地标记测试方法,自动化运行测试,并确保代码在各种情况下的正确性。本文将带您深入探索 Java 中的 `@Test` 注解,揭示其作用、用法以及在实际开发中的应用场景。
|
缓存 Java Spring
较劲大厂面试题二-----Spring-AOP、循环依赖考核趋势
较劲大厂面试题二-----Spring-AOP、循环依赖考核趋势
107 0
较劲大厂面试题二-----Spring-AOP、循环依赖考核趋势
|
XML 设计模式 缓存
16张图解锁Spring的整体脉络
今天来梳理下 Spring 的整体脉络啦,为后面的文章做个铺垫~ 后面几篇文章应该会讲讲这些内容啦 😆 •. Spring AOP 插件 🐖 (🕊了好久都忘了 😅) 2. 分享下 4ye 在项目中利用 AOP + MybatisPlus 对项目进行重构,优化系统中特殊的日志模块的故事 3. Spring 属性注入 , 循环依赖,事务 等这几个比较重要的 4. Spring 源码中的要点 AbstractApplicationContext 中的 refresh 方法里的 12 个方法 5. Spring 中的设计模式 等等
359 1
|
测试技术
软件测试面试题:解释使用TestNG而不是JUnit框架的好处?
软件测试面试题:解释使用TestNG而不是JUnit框架的好处?
178 0
|
开发框架 安全 Java
六十八、Spring框架入门 -- 理论
六十八、Spring框架入门 -- 理论
六十八、Spring框架入门 -- 理论
|
存储 安全 前端开发
深入挖掘Spring系列 -- 依赖查找背后的细节(下)
深入挖掘Spring系列 -- 依赖查找背后的细节(下)
142 0
|
存储 Java API
深入挖掘Spring系列 -- 依赖查找背后的细节(上)
深入挖掘Spring系列 -- 依赖查找背后的细节(上)
169 0