- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
集成单元测试(Catcus)
集成单元测试
如果您撰写了下面这样一个Servlet程式,并想为它进行测试:
● LoginServlet.java
package onlyfun.caterpillar;
import javax.servlet.http.*;
public class LoginServlet extends HttpServlet {
public boolean isValidUser(HttpServletRequest request) {
String username = request.getParameter(username);
String password = request.getParameter(password);
if (username == null || password == null
|| !username.equals(justin)
|| !password.equals(123456)) {
return false;
} else {
return true;
}
}
}
为了要能对isValidUser()方法进行测试,需要一个HttpServletRequest物件,而 HttpServletRequest物件是由 Servlet Container 管理的,它有即定的生命周期,有其收集的资讯,您不能单纯的创建一个HttpServletRequest就打算交差了事。
有几个方法可以对isValidUser()方法进行测试,其中之一自然就是直接将LoginServlet置于 Container 之中,如此一来,isValidUser()若能进行测试,您不仅测试了方法本身,也测试了方法与 Container 所管理的资源之交互行为,我们称这样的测试为 “In-Container测试”。
对于In-Container测试,您不仅测试了单元的逻辑行为,也测试了单元能在 Container 中正确的运行,从测试的角度来看,这样的测试是单元测试的一种,但范围更广,我们称其为集成单元测试(Integration Unit Testing)。相较于集成单元测试,我们称之前只使用JUnit进行的测试为“逻辑单元测试”(Logic Unit Test),In-Container测试是集成单元测试的一种,要实际执In-Container测试,要比单纯的逻辑单元测试复杂的多,您要将 Servlet 置于容器之中、编写 web.xml、启动容器、运行测试程式对 Servlet 进行测试等等。
Cactus 扩展了 JUnit,被设计来辅助您进行In-Container测试,它在很大部份上隐藏了非测试逻辑的交互细节,只留下与测试相关的部份等您来实现,从使用的角度来说,您使用Cactus进行测试,与您使用JUnit进行测试时没有太大的不同。
1 简介Cactus
Cactus协助您进行 In-Container 测试,其基本原理即让Container实际建立相关的物件,例如HttpServletRequest、HttpServletResponse等等, Cactus为您保留这些物件,让您可以指定给所要测试的单元方法,这些物件实际上仍由Container管理,所以您的Servlet等所测试的单元方法,会接近于真正运行于Container之中。来看看Cactus在进行测试时的运作流程:
您会继承XXXTestCase来撰写您的测试案例,例如为Servlet作测试时,您会继承ServletTestCase,在当中您可以定义 beginXXX()、setUp()、testXXX()、tearDown()、endXXX()等方法。
1. 当一个单元测试开始时,TestRunner会产生TestCase实例,执行beginXXX()方法,在这个方法中您可以准备一些HTTP相关的参数,例如加入使用者名称、密码等参数。
2. TestRunner使用HTTP与伺服器上的Redirector Proxy进行沟通,Redirector Proxy会接收请求并产生相关的物件,像是HttpServletRequest、HttpServletResponse等等,并将这些物件保留下来。
3. Redirector Proxy会再产生TestCase实例,并开始执行上面的setUp()、testXXX()、tearDown()等方法,这部份与单纯的JUnit 是相同的,而不同的是,之前Redirector Proxy所保留的HttpServletRequest、HttpServletResponse等等可以在这个时候使用了。
4. HttpServletRequest、HttpServle
文档评论(0)