- 浏览: 913463 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
今天看了下Junit3的源码,记录下一些心得。
Junit的设计使用了许多设计模式。相关的文章网上也有很多。在TestResult中使用了Collecting Parameters 模式。这个模式的意义在于,该类的有几个成员变量集合,是负责记录测试的Failures和Erros,当然还有总共的Test的数目。
TestResult的run TestCase方法会调用具体的TestCase的run方法,如果失败(Failure 或 Error),将通过TestCase生成具体的是败类(TestFailure 或 TestError),最后在TestResult中,集合成员变量把相应的错误再收集起来。
这个模式可能比较简单,所以并没有在大话设计模式中看到过。
Junit3的基本结构可以用下图来表示(网上搜的):
这个图有些地方也没有画清楚,Test是个Interface,TestCase 继承了Assert并实现了Test, TestCase同时还引用了TestResult,TestCase的run方法,使用TestResult作为参数,其实调用了TestResult的run方法。 TestResult的run方法通过Test接口又回调了TestCase的runBare方法(包括setUp() 和 tearDown()的运行方法)。
再说说TestSuite。TestSuite也实现了Test接口,TestCase可以包括多个Test方法,而TestSuite可以包括多个TestCase,所以TestSuit也可以包含多个Test方法(此处说的Test方法是TestCase里的具体test的方法,不是Test类)。
所以TestSuite的使用方法有三种:
1)指定具体的TestCase对象。
2)指定具体的TestCase类(所有public的 void,无参数的 test开头的函数会被执行)
3)指定一个类组,包含多个TestCase类。
// 1) TestSuite suite= new TestSuite(); suite.addTest(new MathTest("testAdd")); suite.addTest(new MathTest("testDivideByZero")); // 2) TestSuite suite= new TestSuite(MathTest.class); // 3) Class[] testClasses = { MathTest.class, AnotherTest.class } TestSuite suite= new TestSuite(testClasses);
test方法的特点:
在TestSuite中又个isTestMethod()方法,说明了test方法的特点:
1)参数为零个
2)以test开头
3)void返回
正是这个特点也使Junit跟testNG比,还需要改进些。
设计模式总结:
1.命令模式。
Client发出请求,通过Command接口,具体的实现有Executor1,Executor2....ExecutorN,从而实现了Client到ExecutorN的解耦。
在Junit中,Test是个顶层的接口,TestCase是这个接口的抽象实现。具体的实现由Client决定,你可以写自己的testcase,extends这个TestCase,然后又自己的测试方法,test开头(这是适配器模式)。
在Junit中Client是Junit框架,例如它通过TestSuite来执行一系列的TestCase时,只要Client实现了TestCase接口,那么Junit框架就能够通过命令模式来调用具体的TestCase了。测试人员也不必关系Junit框架里面是怎么调用的。
2. 适配器模式。
上面也提到了适配器模式。TestCase是Test的抽象实现类。如果Client实现的TestCase只能执行TestCase中的test方法,那么会产生大量的客户实现类。
一般情况,当Client希望通过发送Request1,Request2,Request3,... RequestN来调用服务器的同一个方法,那么此时服务器端就需要一个Adapter来讲这些RequestN指向同一个具体的实现Adaptee。
在Junit中,框架的执行方法是run(),但是Client具体实现的TestCase可以是以test开头的public,void的方法,方法名随便定义。
3. 组合模式。
TestSuite可以灵活的组合不同的TestCase,包括三种方式。
4. 模板方法模式。
测试的流程具有可复制性。
5. 观察者模式。
JUnit提供了三种方式如Text,AWT,Swing这三种运行方式,并且JUnit需要提供方便的扩展接口,这样就存在对象间的依赖关系,当测试进行时的状态发生时(TestCase的执行有错误或者失败等),所有依赖这些状态的对象必须自动更新。
拿Text运行方式来说。在Junit的textUI包下,有两个类。ResultPrinter和TestRunner类,TestRunner的dorun方法,将resultPrinter加到TestResult的Listener列表中。 当TestCase运行时,会调用TestResult的run方法,TestResult方法的run 又调用不同的Listener的startTest方法,结束时调用endTest方法,出错时,addFailure和addError。就这样实现了观察者动态变化的模型。
6. 收集参数模式。
在TestResult中的run方法,参数是TestCase本身。定义了一个用来抛异常的Protectable对象,这个对象抛不同的exceptoin时,调用不同的add方法,添加Error列表和Failure列表。
7. 装饰模式
在Junit中可以对Test进行扩展,使测试人员能增加自己需要的特殊测试,如重复性测试RepeatTest,在多线程中测试ActiveTestSuite。
装饰模式又名包装(Wrapper)模式。其意图是“动态地给一个对象添加一些额外的职责”。 装饰模式有几个对象。装饰者,装饰的组件(component),具体的组件,装饰者的具体实现。
具体的组件实现了Componet,装饰者拥有组件的引用,用引用来实现这个组件的作用。当需要装饰不同的具体实现时,可以继承装饰者来实现自己的装饰。
在Junit中,Test就是那个Component,它有个具体的组件TestCase,一般的装饰者都是使用TestCase来实现测试。当你需要有自己的特殊需要时,你可能需哟啊一个TestDecorator(Junit帮你实现了)。TestDecorator中,它引用了Test这个组件。例如当你需要重复的测试,你可以写一个RepeatTest来继承TestDecorator,然后传入一个特殊的计数的变量,然后就可是实现自己的功能了。RepeatTest已经被Junit实现了。
发表评论
-
Bugzilla 中文手册
2012-08-21 10:22 18950Bugzilla 是一个开源的缺陷跟踪系统(Bug ... -
(zz) Web Service 测试方法
2012-07-12 17:29 17131.WebService简介 WebService ... -
测试Servlet(转)
2012-06-10 18:31 977servlet的测试一般来说需 ... -
Rational Functional 测试命令接口
2012-05-17 13:26 889Functional Test Command-Line ... -
【原】JUNIT 源码分析之TestSuite
2012-04-25 21:59 1522Junit是如何使用适配器模式的呢?概念上可以理解,但 ... -
分享selenium+testng+reprotng+ant配置
2012-04-19 16:12 3534一、Configure1. 安装testNG插件到eclips ... -
【zz】Ant + Junit 实现自动化测试
2012-04-10 14:01 1988在软件开发过程中,我 ... -
关键字驱动测试的原理和概念
2012-04-09 13:45 1709原理及特点 1. ... -
LoadRunner安装及破解
2012-03-19 15:13 10851、去HP的官方网 ... -
Web测试的一些思路
2012-03-19 15:10 838WEB测试分为6个部分: ●功能测试 ● ... -
测中策 - Web自动化测试的策略
2012-03-13 17:01 930大不可量,深不可测&quo ... -
软件测试的思路
2012-02-26 21:08 869任何东西的测试与软 ... -
TC interview
2012-02-21 11:34 10011. 自我介绍 2. 工作内容,完成过的具体项目及职责 3 ... -
RFT中文操作指南(下)
2011-04-02 15:05 1325练习 1.6:回归测试 在 ... -
RFT中文操作指南(上)
2011-04-02 15:03 1037练习 1.1:设置 Functional Test IB ... -
理解自动化测试
2011-04-02 11:06 1680“自动化测试”有时也叫“测试自动化”,由两部分组成,“自动化” ... -
一个纸杯子的测试用例
2010-10-26 11:52 1203一个纸杯,我们能想出多少个测试用例呢?想必很多人 ... -
测试一个搜索框
2010-10-26 11:51 1615摸索中,还很不成熟,但愿能抛砖引玉吧,我做的搜索测试是来抓取百 ... -
测试用例编写的“侯式标准”
2010-10-26 11:51 1463作为软件测试人员 ... -
编写测试用例方法心得体会
2010-10-26 11:47 1365在我的个人邮箱和MSN上,通常同行都问我类似下面这样的问题: ...
相关推荐
4. **源码分析**:阅读和理解源码是提升编程技能的有效方式。通过SPBT的源码,可以学习到设计模式、异常处理、并发控制等高级Java概念,同时也能理解其与Java Web的交互方式。 5. **软件插件**:在Java开发中,...
SSH框架是Web应用开发中常见的技术栈...以上内容详述了SSH框架开发的系统源码所涵盖的知识点,包括各个框架的职责、数据库设计的重要性以及Web应用开发的全过程。掌握这些知识,对于成为一名熟练的Web开发者至关重要。
7. **源码分析**:"yuanma"可能是项目的源代码文件夹,包含业务逻辑处理、数据访问层、控制层等组件。通过阅读源码,可以深入理解项目的实现机制,学习如何组织和架构Java Web应用。 8. **版本控制与协作**:虽然未...
该压缩包文件“基于java的-120-jspm面向学生成绩分析系统--LW-源码.zip”提供了一个基于Java技术构建的学生成绩分析系统的源代码。这个系统可能用于帮助教育机构或教师对学生的成绩进行统计、分析和管理,以便更好地...
5. **JUnit集成**: 对JUnit测试的支持得到了增强,包括测试结果的汇总和报告,方便进行持续集成和测试驱动开发。 **源代码分析** 深入研究Ant 1.8.1的源代码,我们可以了解其内部的工作机制: 1. **任务实现**: ...
4. **源码分析**: - "??java?-149-springboot"????"??--LW-??\": 这可能是项目主目录,包含了项目的源代码结构。 - "????-yuan.png": 可能是系统架构或设计图,用于展示系统组件和它们之间的关系。 - "????"??....
- **yuanma**:这部分很可能是项目的源码文件,包含系统的业务逻辑、数据访问层、控制层等核心组件,通过阅读和分析源码,可以深入理解系统的设计思想和实现方式。 5. **程序设计**:在系统设计上,项目可能采用了...
至于"yuanma",这可能是源码的压缩文件,包含了项目的实际代码,通过阅读和分析这些源码,可以深入学习项目的设计思想和实现方式。 在二手车交易撮合算法设计中,可能涉及的知识点包括: 1. 数据结构与算法:为了...
10. **测试**:为了保证软件质量,开发者可能使用JUnit进行单元测试,Mockito进行模拟对象测试,以及Selenium进行自动化UI测试。 11. **文档**:尽管压缩包中没有明确提到,但一个完整的项目通常会有相应的开发文档...
【标题】"基于java的-123-jspm烯烃厂压力管道管理...这个源码项目为Java开发者提供了一个学习和实践的平台,他们可以通过阅读和分析源代码,提升在企业级应用开发中的技能,同时了解如何处理工业自动化领域的特殊需求。
4. **yuanma**:这个文件名可能是源码的简写,意味着包含了项目的所有源代码文件,包括但不限于业务逻辑层(Service)、持久层(DAO)、模型(Entity)、控制器(Controller)、视图(View)以及配置文件等。...
【标题】中的“基于java的-2-[计算机毕业设计]基于SSM的宠物管理系统-源码.zip”表明这...通过这个项目,学生可以学习到完整的Web应用开发流程,从需求分析、设计、编码、测试到部署,同时加深对SSM框架的理解和使用。
【标题】:“基于Java的-21-[计算机毕业设计]基于SSM的游戏论坛平台-源码.zip” ...通过分析和学习这个项目,你将能够掌握SSM框架的实际应用,以及如何构建一个完整的Web应用程序,同时提升你的软件工程实践能力。
【标题】:“PaaTP:计算薄纸碎片的工作” 在IT行业中,"PaaTP"可能是...由于没有具体的“PaaTP-master”项目源码或详细文档,以上分析基于一般的IT实践和经验进行。要深入了解该项目,需要查看实际的代码和相关文档。
"movie-discovery-server-master"这个文件名暗示这是一个项目的源码仓库,很可能包含了整个电影发现服务器的全部代码。 首先,我们要理解Java在构建Web服务中的作用。Java是一种广泛用于开发后端服务的语言,具有跨...