您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
Junit--Junit In Action 笔记
作者:网络转载 发布时间:[ 2013/7/8 11:23:18 ] 推荐标签:

6.3 替换web服务器资源
         现在你知道如何简单地启动和配置Jetty了,下一步我们把视线放在HTTP连接的testcase上,你会先写一个测试来证明可以调用一个有效的URL,并能取得它的内容。

6.3.1 建立第一个stub测试
         为了证明webClient工作于有效的URL,你需要在测试前启动Jetty服务器,这些你能在Junit test case里setUp方法中实现。你还可以用tearDown方法停止服务器的运行。代码6.3列出了具体做法。
         为了实现setUp和rearDown方法,你有两条解决之道。准备一个包含文本“it works”的静态页面。把该文本放在你的文档根目录中。另一种方法是,配置Jetty以使用你自己定制的处理器,它不用在文件系统的文件中取字符串,而是直接返回一个字符串。这是一个更强大的技术,即便远程http服务器在你的webclient客户应用程序上抛出一个错误代码的时候,你还是能对这个test case进行单元测试。
         创建一个Jetty处理器
         代码6.4显示了如何创建一个返回“it works”的jetty处理器。
每个test suite 启动和停止jetty各一次
       
       
6.4 替换连接
         现在,你替换了服务器的资源。改为http连接又会如何呢?这样做会妨碍你有效的测试连接,但这没有关系,这一点不正是你真正的目标
。你真正感兴趣的是孤立地测试代码逻辑。在以后的阶段可以用功能测试或集成测试来检验连接。
         当你需要不改变代码替换连接的时候,你会发现自己很幸运,因为JDK的URL和HttpURLConnection类允许你引入自定义的协议处理器,处理任何类型的通讯协议。你可以使任何对HttpURLConnection类的调用指向你自己的测试类,这些类会返回测试中任何需要的东西。
       
6.4.1 创建自定义RUL协议处理器
         为了实现自定义的URL协议处理器,你需要调用以下的JDK方法,并把它传递给自定义的URLStramHandlerFactory对象:
Java.net.setURLStreamHandlerFactory


第7章:用mock object孤立测试
         孤立于其他方法和环境而单元测试每一个方法,这显然是个值得追求的目标。但如何实现呢?在第六章中你知道了stub技术是怎样把代码和环境隔离起来而进行单元测试的。那么诸如隔离调用其他类的方法此类的细粒度隔离又如何呢?可行吗?实现这些会不会需要付出很大的努力,从而抵消进行测试所带来的收益?
         回答是:“可以实现的”这项技术叫做mock objects。假设你要单元测试每一个方法,mock objects策略允许你在可能的细等级上进行单元测试,逐个方法地进行测试。
7.1 mock objects 简介
         隔离测试有着巨大的好处,如可以测试还未写完的代码,另外,隔离测试能帮助团队单元测试代码的一部分,而无需等待全部代码的完成。
         也许大的好处在于编写专门测试单一方法的代码,免去了被测试的方法调用其他对象而带来的副作用。小是美。编写小而专一的测试是有用的;小的测试容易理解,当代码的其他部分改变时也不会被破坏。记住,进行成组测试的一个好处是,它给了你重构的勇气――单元测试像反对衰退的卫士。如果你的测试粒度比较大,那么一旦重构引入了一个bug,会有一系列的测试失败;结果是测试告诉你出现了一个错误,但你并不知道它在哪里。
         Mock objects (简称mocks)非常适合把部分代码逻辑的测试同其他的代码隔离开来。Mocks替换了测试中你的方法协作的对象,从而提供了隔离层。从这个意义来说,它跟stub类似。
7.2 体验mock objects ; 一个简单例子
         让我们体验一下第一个mock

7.3 把Mock objects 用作重构手法
         有一些人曾经说过,单元测试应该对测试中的代码透明;你不应为了简化测试而改变运行时代码。这是错误的!单元测试是对运行时代码的好应用,应该同其他运用同等看待。如果你的代码不能在测试中应用,你应该纠正代码。


第8章: 使用Cactus进行容器内测试
本章内容
                对组件进行单元测试时用mock objects的缺点
                介绍使用Cactus进行容器内测试
                Cactus的工作原理
在恰当的时候进行的设计,让程序要么不能运行,一旦运行起来是正确运行
                从本章开始,我们将研讨如何对J2EE组件进行单元测试.对组件进行单元测试要难于对普通Java类进行单元测试.组件要和它们的容器打交道,而容器只有在运行时才能提供服务.Junit并没有像其他J2EE组件那样被设计成在容器内执行,那么我们该如何测试组件呢?
                本章介绍了一种对J2EE组件进行单元测试的方法:容器内单元测试,也称作集成单元测试.更确切地说,我们讲讨论使用cactus框架在容器内运行J2EE测试的好处和坏处.我们将展示,使用第7章介绍的mock objects方法能做到什么,而这种方法无能为力时容器内测试方法如何使得你可以编写集成单元测试.
8.1 对组件进行单元测试的问题
                想象一下,你有一个web应用程序,它使用了servlet,你希望对sampleservlet servlet的isAuthenticated 方法进行单元测试.
为了能够测试这个方法,你需要得到一个合法的HttpServletRequest对象.不幸的是,不可能调用new HttpServletRequest 来创建一个可用的请求.HttpServletRequest 的生命周期是由容器管理的,无法单独使用Junit为isAuthenticated 方法编写测试.
定义: 组件/容器—组件是在容器内部执行的一段代码.容器则是为存放在内的组件提供有用服务的器皿.
                幸运的是,有几种可供选择的解决方案,我们将在后续的小节中谈到这些方案.概括地说,我们将展现两种核心方案:用mock objects进行容器外测试和用Cactus进行容器内测试
                这两种方法的一个变体是使用stub容器,比如HttpUnit中的ServletUnit模块.不幸的是,我们没有找到J2EE容器的完整stub实现.ServletUnit只实现了一部分Servlet规约
                Mock objects和Cactus都是可行的方法.在第7章中,我们讨论了mock objects这种容器外策略的优势和劣势.在本章中,我们将我们专注于Cactus这种容器内策略,并展示它的相对优势和劣势.第9章我们将专注于对servlet进行单元测试.在那一章中,我们将讨论当测试servlet的时候何时使用mock objects,何时使用Cactus.

8.2 用mock objects测试组件
                让我们试着用mock objects来测试servlet,然后讨论这种方法得优势和劣势.在第7章中,你创建了你自己得mock objects.幸运的是,有好几个框架可以自动生成mock objects.在本章中,你将使用EasyMock(http://www.easymock.org)

上一页1234567下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd