• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 2011,更要虎虎的 QQ群 測試開發工程師(95934315) Blog:http://cuckoo2010.blog.163.com/

    用cactus,jetty實現對servlet類進行單元測試一

    上一篇 / 下一篇  2009-10-29 05:55:50 / 個人分類:thinking in testing

    JUnit是名聲大燥了,想必只要學過JAVA的人都知道世上有個東東叫JUnit。記得有個想學JUnit的兄弟在群上大喊:我要學JUnit,因為JUnit應用最廣,最好的單元測試工具。無法否認,JUnit是一個非常讓JAVA程度員或白盒測試人員喜愛的一個框架。但有時候應用最廣的未必就是萬能的,最好的未必就是最合適的。

    JUnit也是有缺點的。想象一下,你有一個web程序,非常簡單的那種,是用servlet實現的,你希望對其中的loginUser()方法進行單元測試,代碼如下:

     

    package com.test.servlet;

     

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

     

    public class LoginServlet extends HttpServlet {

     

        private static final long serialVersionUID = -5174161414983884806L;

     

        public boolean loginUser(HttpServletRequest request) {

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

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

        if (username == null || password == null || !username.equals("cuckoo")

                    || !password.equals("123")) {

                return false;

            } else {

                return true;

            }

        }

    }

     

    為了能夠測試這個方法,你需要得到一個合法的HttpServletRequest對象。但不幸的是,你不可能調用 new HttpServletRequest 來創建一個可用的請求。因為HttpServletRequest的生命周期是由容器管理的,因此你無法單獨使用JUnitloginUser方法編寫測試類。

        此時我們今天的主角就要出來了,它就是cactus,cactus是什么?仙人掌嗎?呵呵,當然不是了。仙人掌只是它翻譯過來的中文名。它如commons-dbutils,commons-beanutils等等一樣,是apache上的一個開源框架。下載地址為http://jakarta.apache.org/cactus/index.html 或是http://archive.apache.org/dist/jakarta/cactus/  用官網是話說,cactus就是

    Cactus is a simple test framework for unit testing server-side java code (Servlets, EJBs, Tag Libs, Filters, ...).

    The intent of Cactus is to lower the cost of writing tests for server-side code. It uses JUnit and extends it.

    Cactus是一個基于JUnit框架的簡單測試框架,用來單元測試服務端Java代碼。Cactus框架的主要目標是能夠單元測試服務端的使用Servlet對象的Java方法httpServletRequest,HttpServletResponse,HttpSession等。Cactus的工作原理在官網上也可以找到,那有詳細的說明,以下是其中的一種:圖來自于cactus官網


    Cactus provides several TestCase classes that extends the JUnit Testcase and it also provides several kind of redirectors (Servlet Redirector, JSP Redirector, ...). The diagram above is a generic diagram which serves to explain the principles. You'll find details for a specific redirector proxy in the next section. YYYTestCase = ( ServletTestCase | FilterTestCase | JspTestCase ) XXX is the name of the test case. Each YYYTestCase class contains several test cases

    這是官網的簡單說明,意思是:cactus提供了幾個TestCase的類擴展了JUnitTestCase的,同時也提供了若干種轉向器(重定向程序組件,JSP的重定向,...).上圖是一個普通的圖,這足以解釋的原則。你會發現,在未來一段特定的重定向代理細節。 YYYTestCase =ServletTestCase | FilterTestCase | JspTestCaseXXX是測試案例的名稱。每個YYYTestCase類包含幾個測試案例。

    我們將使用CactusServletTestRedirector作為上圖介紹的Redirector Proxy,并使用CactusServletTestRunner作為執行測試時的TestRunner,這兩個被撰寫為Servlet,所以要在web.xml中加以定義,代碼為:

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

     

        <!--

        <description>cactus test</description>

        <display-name>cactusTest</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>

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

        <servlet-class>com.test.servlet.LoginServlet</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>

      <servlet-mapping>

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

        <url-pattern>/servlet/LoginServlet</url-pattern>

      </servlet-mapping>

      </web-app>


    TAG: Cactus cactus Jetty jetty Servlet servlet 單元測試

     

    評分:0

    我來說兩句

    顯示全部

    :loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

    日歷

    « 2011-06-12  
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  

    數據統計

    • 訪問量: 15149
    • 日志數: 24
    • 文件數: 7
    • 建立時間: 2009-02-09
    • 更新時間: 2011-02-18

    RSS訂閱

    Open Toolbar
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>