技术开发 频道

实战每晚构建之主要技术

    1.3 cactus单元测试

    cactus单元测试工具是对junit框架的扩充,使junit的思想和便利同样用于Browser/Server web应用程序中的测试,具体的来说就是测试servlet,jsp和filter。 本节讲述cactus 单元测试原理,servlet测试用例的书写(jsp,filter的测试用例的书写请参照cactus文档),如何配置ant运行这样的测试。

    cactus 单元测试原理


    Cactus提供了好几个扩展JUnit Testcase的子类和相应的redirector,上面的工作原理图解释了cactus测试的工作原理。

    其中YYYTestCase = ( ServletTestCase子类 | FilterTestCase子类 | JspTestCase 子类)

    XXX我们写的testcase名字的后半部分。

    下面我们分步骤解释在我们的cactus Testcase子类里头的每一个testXXX()方法的具体情况:

    ·JUnit 测试运行器调用YYYTestCase.runTest()方法。

    ·这个方法寻找 beginXXX(WebRequest)方法,如果找到则执行。

    ·传给beginXXX(WebRequest)方法的参数WebRequest 可用来设置 HTTP头, HTTP 参数,这些参数将被发送到第2步的 Redirector 代理。

    ·YYYTestCase.runTest() 方法打开连向Redirector 代理的HTTP 连接,beginXXX(WebRequest)方法设置的HTTP协议参数将被送到代理。

    ·Redirector 代理在服务端作为YYYTestCase的代理(其实我们的YYYTestCase被实例化两次,一次在客户端被JUnit 测试运行器实例化,一次在服务器端被代理实例化,客户端实例执行beginXXX() and endXXX()方法,服务端实例执行Junit 测试用例的方法setup(),testXXX(),and teardown())。

    Redirector 代理有下列事情可做:

    ·用java的内省功能创建服务端实例;

    ·设置一些缺省对象;

    ·按照客户端实例的意愿创建session。

    ·执行Junit 测试用例的方法setup(),testXXX(),and teardown();

    ·我们的 testXXX()方法调用服务端代码来进行测试,使用assertEquals()方法对测试结果和预期结果进行比较,如果两者相符为测试成功,否则为测试失败;

    ·如果测试失败,Redirector 代理将捕获testXXX()方法抛出的的异常;

    ·Redirector 代理将异常信息返回给客户端的JUnit 测试运行器,JUnit 测试运行器可以生成测试报告;

    ·如果没有异常出现, YYYTestCase.runTest()方法寻找

    endXXX(org.apache.cactus.WebResponse) endXXX(com.meterware.httpunit.WebResponse) (后者用在和httpunit集成·中) 方法,如果找到则执行。

    ·endXXX方法中,我们可以检查返回的HTTP 头, Cookies 和output stream ,这个检查可以借助于Junit的 assertEquals或者cactus提供的帮助类。

    在这里需要提出的一点就是:代理不会去真正执行servlet,或filter,或jsp的代码,你需要在testXXX方法中调用或模仿这些代码。

0
相关文章