Cactus测试

转自:http://caterpillar.onlyfun.net/GossipCN/JUnit/FirstCactusWithTomcat.htm

来看看如何使用Cactus配合Tomcat来运行一个简单的Servlet测试,我们先取得Cactus相关档案,请至 Cactus 官方网站 下载,下载后解开压缩档案,将其下lib目录中的commons-logging-xxx.jar、aspectjrt-xxx.jar、cactus- xxx.jar、commons-httpclient-xxx.jar与junit-xxx.jar放置在您的Web应用程式的WEB-INF/lib 目录下。

您将使用Cactus的ServletTestRedirector作为之前介绍的Redirector Proxy,并使用Cactus的ServletTestRunner作为执行测试时的TestRunner,这两个被撰写为Servlet,所以您在 web.xml中加以定义:

  • web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 
 
    <description> 
        Cactus Demo
    </description> 
    <display-name>Cactus Demo</display-name> 
    
    <servlet>
        <servlet-name>ServletRedirector</servlet-name>
        <servlet-class>
            org.apache.cactus.server.ServletTestRedirector
        </servlet-class>
    </servlet>
    
    <servlet>
        <servlet-name>ServletTestRunner</servlet-name>
        <servlet-class>
            org.apache.cactus.server.runner.ServletTestRunner
        </servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>ServletRedirector</servlet-name>
        <url-pattern>/ServletRedirector</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>ServletTestRunner</servlet-name>
        <url-pattern>/ServletTestRunner</url-pattern>
    </servlet-mapping>
</web-app>

接下来您先撰写测试案例,您将测试Servlet,所以要继承ServletTestCase:
  • LoginServletTest.java
package onlyfun.caterpillar.test;

import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;
import onlyfun.caterpillar.LoginServlet;

public class LoginServletTest extends ServletTestCase {    
    public void beginValidUser(WebRequest webRequest) {
        webRequest.addParameter("username", "justin");
        webRequest.addParameter("password", "123456");
    }
    
    public void testValidUser() {
        LoginServlet loginServlet = new LoginServlet();
        assertTrue(loginServlet.isValidUser(request));
    }

    public void beginInValidUser(WebRequest webRequest) {
        webRequest.addParameter("username", "guest");
        webRequest.addParameter("password", "123456");
    }
    
    public void testInValidUser() {
        LoginServlet loginServlet = new LoginServlet();
        assertFalse(loginServlet.isValidUser(request));
    }
}

TestRunner会呼叫beginXXX()方法(如果有的话),beginXXX()方法接收一个WebRequest 参数,您可以透过这个物件设定一些HTTP相关的讯息,例如加入使用者名称与密码,每一个testXXX()配合一个beginXXX()方法,所以名称 上必须符合,beginXXX()方法会在testXXX()方法之前被呼叫。

在testXXX()方法中您可以看到我们使用request名称,在接收到请求之后,Container 会产生相关的资源物件,ServletTestRedirector会将这些物件设定给request名称来参考,request即 ServletRequest物件,之后您可以使用这些相关物件来执行测试。

根据测试案例的内容,您可以撰写LoginServlet:
  • LoginSerlvet.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;
        }
    }
}

接下来可以启动Container了,可以开启浏览器并指定以下的网址来进行测试:
http://localhost:8080/cactusDemo/ServletTestRunner?
    suite=onlyfun.caterpillar.test.LoginServletTest


执行的结果会以XML传回:
 <testsuites>
 <testsuite name="onlyfun.caterpillar.test.LoginServletTest"
            tests="2" failures="0" errors="0" time="0.781">
    <testcase name="testValidUser" time="0.625"/>
    <testcase name="testInValidUser" time="0.062"/>
    </testsuite>
 </testsuites>

您也可以直接取得Cactus网站上提供的 cactus-report.xsl,并将之放在Web应用程式的目录下,然后使用以下的方式来取得较易阅读的讯息:
http://localhost:8080/cactusDemo/ServletTestRunner?
    suite=onlyfun.caterpillar.test.LoginServletTest&xsl=cactus-report.xsl


一个执行的结果网页画面如下:
Cactus执行画面

您也可以在web.xml中指定cactus-report.xsl的位置,例如:
  • web.xml
...
     <servlet>
        <servlet-name>ServletTestRunner</servlet-name>
        <servlet-class>
            org.apache.cactus.server.runner.ServletTestRunner
        </servlet-class>
        <init-param>
            <param-name>xsl-stylesheet</param-name>
            <param-value>styles/cactus-report.xsl</param-value>
        </init-param>
    </servlet>
...

之后在运行测试时可以于网址列中如下指定:
http://localhost:8080/cactusDemo/ServletTestRunner?
    suite=onlyfun.caterpillar.test.LoginServletTest&transform=yes


指定transfer=yes时可以对XML进行转换,如果不指定的话,直接输出XML。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值