zhyiwww
          用平實(shí)的筆,記錄編程路上的點(diǎn)點(diǎn)滴滴………
          posts - 536,comments - 394,trackbacks - 0
           

          使用cactus實(shí)現(xiàn)對(duì)servlet進(jìn)行單元測(cè)試

          步驟如下:

          [1]       創(chuàng)建Web工程ServletTestDemo

          myeclipse中創(chuàng)建Web project,命名為ServletTestDemo

          [2]       下載cactus-bin-1.8

          apache官方網(wǎng)站下載

          [3]        導(dǎo)入cactus的相關(guān)包到項(xiàng)目的lib目錄

                   導(dǎo)入后,/WebRoot/WEB-INF/lib目錄結(jié)構(gòu)如下所示:

                  |-- lib

                  |   |-- cactus.core.framework.uberjar.javaEE.14-1.8.1.jar

                  |   |-- cactus.integration.ant-1.8.1.jar

                  |   |-- cactus.integration.shared.api-1.8.1.jar

                  |   |-- commons-codec-1.4.jar

                  |   |-- commons-httpclient-3.1.jar

                  |   |-- commons-logging-1.1.jar

                  |   |-- httpunit-1.6.jar

                         |   `-- junit-3.8.2.jar

          [4]       配置項(xiàng)目web.xml

          在項(xiàng)目web.xml中添加如下內(nèi)容:

                   <servlet>

                             <servlet-name>ServletRedirector</servlet-name>

                             <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>

                             <init-param>

                                      <param-name>param1</param-name>

                                      <param-value>value1 used for testing</param-value>

                             </init-param>

                   </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>

          [5]       創(chuàng)建Servlet

          創(chuàng)建LoginServlet,代碼如下:

          import java.io.IOException;

          import java.io.PrintWriter;

          import javax.servlet.ServletException;

          import javax.servlet.http.HttpServlet;

          import javax.servlet.http.HttpServletRequest;

          import javax.servlet.http.HttpServletResponse;

          public class LoginServlet extends HttpServlet {

                   private static final long serialVersionUID = 1L;

                   public LoginServlet() {

                             super();

                   }

                   public void destroy() {

                             super.destroy(); // Just puts "destroy" string in log

                             // Put your code here

                   }

                   public void doGet(HttpServletRequest request, HttpServletResponse response)

                                      throws ServletException, IOException {

                             response.setContentType("text/html");

                             PrintWriter out = response.getWriter();

                             out

                                               .println("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">");

                             out.println("<HTML>");

                             out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");

                             out.println(" <BODY>");

                             out.print("    This is ");

                             out.print(this.getClass());

                             out.println(", using the GET method");

                             out.println(" </BODY>");

                             out.println("</HTML>");

                             out.flush();

                             out.close();

                   }

                   public void doPost(HttpServletRequest request, HttpServletResponse response)

                                      throws ServletException, IOException {

                             response.setContentType("text/html");

                             PrintWriter out = response.getWriter();

                             out

                                               .println("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">");

                             out.println("<HTML>");

                             out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");

                             out.println(" <BODY>");

                             out.print("    This is ");

                             out.print(this.getClass());

                             out.println(", using the POST method");

                             out.println(" </BODY>");

                             out.println("</HTML>");

                             out.flush();

                             out.close();

                   }

                   public String getServletInfo() {

                             return "This is my default servlet created by Eclipse";

                   }

                   public void init() throws ServletException {

                   }

              public void saveSession(HttpServletRequest request)

              {

                       String testparam = request.getParameter("testparam");

                       request.getSession().setAttribute("testAttribute", testparam);

              }

          }

          [6]       修改項(xiàng)目web.xml,添加servlet映射

          web.xml中添加如下內(nèi)容:

                   <servlet>

                             <servlet-name>LoginServlet</servlet-name>

                             <servlet-class>LoginServlet</servlet-class>

                   </servlet>

           

                   <servlet-mapping>

                             <servlet-name>LoginServlet</servlet-name>

                             <url-pattern>/login</url-pattern>

                   </servlet-mapping>

          [7]       創(chuàng)建Servlet測(cè)試類(lèi)

          創(chuàng)建TestLoginServlet,代碼如下:

          import java.io.IOException;

          import javax.servlet.ServletException;

          import junit.framework.Test;

          import junit.framework.TestSuite;

          import org.apache.cactus.ServletTestCase;

          import org.apache.cactus.WebRequest;

          import com.meterware.httpunit.WebResponse;

          public class TestLoginServlet extends ServletTestCase {

                   public TestLoginServlet(String theName) {

                             super(theName);

                   }

                   public static Test suite() {

                             return new TestSuite(TestLoginServlet.class);

                   }

                   public void beginSaveSessionOk(WebRequest webRequest) {

                             webRequest.addParameter("testparam", "it works!");

                   }

                   public void testSaveSessionOk() {

                             LoginServlet servlet = new LoginServlet();

                             servlet.saveSession(request);

                             assertEquals("it works!", session.getAttribute("testAttribute"));

                   }

                   public void endSaveSessionOk(WebResponse response) {

                             System.out.println("end save session ok");

                   }

                   public void beginDoGet(WebRequest webRequest) {

                             webRequest.addParameter("testparam", "it works!");

                   }

                   public void testDoGet() {

                             LoginServlet servlet = new LoginServlet();

                             try {

                                      servlet.doGet(request, response);

                             } catch (ServletException e) {

                                      e.printStackTrace();

                             } catch (IOException e) {

                                      e.printStackTrace();

                             }

                   }

          }

          [8]       復(fù)制測(cè)試結(jié)果報(bào)表樣式

          下載http://jakarta.apache.org/cactus/misc/cactus-report.xsl

          復(fù)制cactus-report.xsl到項(xiàng)目的根目錄。

          在測(cè)試結(jié)果顯示時(shí)需要此樣式。

          [9]       驗(yàn)證目錄結(jié)構(gòu)

          執(zhí)行完以上操作, 目錄結(jié)構(gòu)如下圖:

          .

          |-- src

          |   |-- LoginServlet.java

          |   `-- TestLoginServlet.java

          `-- WebRoot

              |-- cactus-report.xsl

              |-- index.jsp

              |-- META-INF

              |   `-- MANIFEST.MF

              `-- WEB-INF

                  |-- cactus.properties---

                  |-- classes

                  |   |-- LoginServlet.class

                  |   `-- TestLoginServlet.class

                  |-- lib

                  |   |-- cactus.core.framework.uberjar.javaEE.14-1.8.1.jar

                  |   |-- cactus.integration.ant-1.8.1.jar

                  |   |-- cactus.integration.shared.api-1.8.1.jar

                  |   |-- commons-codec-1.4.jar

                  |   |-- commons-httpclient-3.1.jar

                  |   |-- commons-logging-1.1.jar

                  |   |-- httpunit-1.6.jar

                  |   `-- junit-3.8.2.jar

                  `-- web.xml

          [10]   啟動(dòng)服務(wù)

          [11]   執(zhí)行測(cè)試

          在瀏覽器地址欄,輸入:

          http://localhost:8080/ServletTestDemo/ServletTestRunner?suite=TestLoginServlet,回車(chē),測(cè)試結(jié)果如下:

            <?xml version="1.0" encoding="UTF-8" ?>
          - <testsuites>
          - <testsuite name="TestLoginServlet" tests="2" failures="0" errors="0" time="0.524">
            <testcase name="testSaveSessionOk" time="0.517" />
            <testcase name="testDoGet" time="0.006" />
            </testsuite>
            </testsuites>



          此測(cè)試結(jié)果是以xml的形式顯示。

          如果結(jié)構(gòu)以html報(bào)表的形式顯示,可以輸入如下地址:

          http://10.0.3.133:8080/ServletTestDemo/ServletTestRunner?suite=TestLoginServlet&xsl=cactus-report.xsl

          回車(chē),結(jié)果如下:

          Unit Test Results

          Designed for use with Cactus.


          Summary

          Tests Failures Errors Success rate Time
          2 0 0 100.00% 0.527
          Note: failures are anticipated and checked for with assertions while errors are unanticipated.


          TestCase TestLoginServlet

          Name Status Type Time(s)
          testSaveSessionOk Success 0.516
          testDoGet Success 0.010

           

          Back to top
          [12]    



          |----------------------------------------------------------------------------------------|
                                     版權(quán)聲明  版權(quán)所有 @zhyiwww
                      引用請(qǐng)注明來(lái)源 http://www.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2010-10-18 15:30 zhyiwww 閱讀(1742) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): 軟件測(cè)試

          FeedBack:
          # re: 使用cactus實(shí)現(xiàn)對(duì)servlet進(jìn)行單元測(cè)試
          2011-04-26 10:41 | lindalai
          我剛學(xué)Cactus測(cè)試,很受用,謝謝!但是我有一個(gè)問(wèn)題想問(wèn)一下:我在測(cè)試以html形式顯示時(shí),不能顯示結(jié)果,而是顯示如下:
          無(wú)法顯示 XML 頁(yè)。
          使用 XSL 樣式表無(wú)法查看 XML 輸入。請(qǐng)更正錯(cuò)誤然后單擊 刷新按鈕,或以后重試。


          --------------------------------------------------------------------------------

          文檔的頂層無(wú)效。處理資源 'http://localhost:8080/JUnitTest/cactus-report.xsl' 時(shí)出錯(cuò)。第 1 行,位置: 23

          <?xml version="1.0" ?>

          請(qǐng)問(wèn)這是怎么回事呢?  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 江孜县| 余庆县| 昭平县| 台湾省| 全南县| 兴安盟| 泰安市| 昂仁县| 乐昌市| 项城市| 井陉县| 刚察县| 剑阁县| 连城县| 凌海市| 合川市| 大宁县| 搜索| 伊川县| 黎城县| 淮阳县| 迁西县| 德清县| 新兴县| 岗巴县| 江城| 磐安县| 阿坝县| 凤山市| 新巴尔虎左旗| 珲春市| 开江县| 南溪县| 沧源| 家居| 扶余县| 海晏县| 什邡市| 五河县| 讷河市| 磴口县|