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

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

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    使用EasyMock使單元測試更加容易

    發布: 2008-6-13 18:17 | 作者: 不詳 | 來源: 測試時代編輯整理 | 查看: 82次 | 進入軟件測試論壇討論

    領測軟件測試網

    單元測試是XP極力推薦的測試驅動開發模式,是保證軟件質量的重要方法。盡管如此,對許多類的單元測試仍然是極其困難的,例如,對數據庫操作的類進行測試,如果不準備好數據庫環境以及相關測試數據,是很難進行單元測試的;再例如,對需要運行在容器內的Servlet或EJB組件,脫離了容器也難于測試。

    幸運的是,Mock Object可以用來模擬一些我們需要的類,這些對象被稱之為模仿對象,在單元測試中它們特別有價值。

    Mock Object用于模仿真實對象的方法調用,從而使得測試不需要真正的依賴對象。Mock Object只為某個特定的測試用例的場景提供剛好滿足需要的最少功能。它們還可以模仿錯誤的條件,例如拋出指定的異常等。

    目前,有許多可用的Mock類庫可供我們選擇。一些Mock庫提供了常見的模仿對象,例如:HttpServletRequest,而另一些Mock庫則提供了動態生成模仿對象的功能,本文將討論使用EasyMock動態生成模仿對象以便應用于單元測試。

    到目前為止,EasyMock提供了1.2版本和2.0版本,2.0版本僅支持Java SE 5.0,本例中,我們選擇EasyMock 1.2 for Java 1.3版本進行測試,可以從http://www.easymock.org下載合適的版本。
    我們首先來看一個用戶驗證的LoginServlet類:

    /**
     * LoginServlet.java
     * Author: Liao Xue Feng, www.javaeedev.com
     */
    package com.javaeedev.test.mock;

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class LoginServlet extends HttpServlet {

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            // check username & password:
            if("admin".equals(username) && "123456".equals(password)) {
                ServletContext context = getServletContext();
                RequestDispatcher dispatcher = context.getNamedDispatcher("dispatcher");
                dispatcher.forward(request, response);
            }
            else {
                throw new RuntimeException("Login failed.");
            }
        }

    }

    這個Servlet實現簡單的用戶驗證的功能,若用戶名和口令匹配“admin”和“123456”,則請求被轉發到指定的dispatcher上,否則,直接拋出RuntimeException。

    為了測試doPost()方法,我們需要模擬HttpServletRequest,ServletContext和RequestDispatcher對象,以便脫離J2EE容器來測試這個Servlet。
    我們建立TestCase,名為LoginServletTest:

    public class LoginServletTest extends TestCase {
    }

    我們首先測試當用戶名和口令驗證失敗的情形,演示如何使用EasyMock來模擬HttpServletRequest對象:

        public void testLoginFailed() throws Exception {
            MockControl mc = MockControl.createControl(HttpServletRequest.class);
            HttpServletRequest request = (HttpServletRequest)mc.getMock();
            // set Mock Object behavior:
            request.getParameter("username");
            mc.setReturnValue("admin", 1);
            request.getParameter("password");
            mc.setReturnValue("1234", 1);
            // ok, all behaviors are set!
            mc.replay();
            // now start test:
            LoginServlet servlet = new LoginServlet();

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: EasyMock 單元

    41/41234>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品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>