首頁 > Java > java教程 > 新Java運動:測試驅動開發3---使用者註冊

新Java運動:測試驅動開發3---使用者註冊

黄舟
發布: 2016-12-30 13:11:24
原創
1240 人瀏覽過

用戶註冊流程是用戶輸入用戶名和密碼,然後正確將用戶基本資訊和帳戶資訊建立到資料庫中去。

讓我們先從簡單的步聚做起,第一步是寫一個測試用例,傳入cmd=registerUser,userName=閔濤,然後調用Servlet,最後在d:/ablog/app.html檔案中回寫出收到的用戶名。首稱是則試程式碼:

@Test
	public void testRegisterUser001() {
		HttpServletRequest request = new HttpJunitRequest();
		Map<String, String[]>params = (Map<String, String[]>)request.getParameterMap();
		String[] cmd = new String [1];
		cmd[0] = "registerUser";
		params.put("cmd", cmd);
		String[] userName = new String[1];
		userName[0] = "y闫涛t";
		params.put("userName", userName);
		MainServlet m = new MainServlet();
		HttpServletResponse response = new HttpJunitResponse();
		try {
			m.doGet(request, response);
			response.getWriter().close();
		} catch (IOException | ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		assertTrue(1>0);
	}
登入後複製

下面是寫程式碼通過這個測試案例,首先在MainServlet依照指令參數進行跳轉中,加入如下程式碼:

switch (cmd) {  
        case "registerUser":  
            registerUser(request, response);  
            break;
登入後複製

具體處理函數如下所示:

private void registerUser(HttpServletRequest request, HttpServletResponse response)   
            throws IOException, ServletException {  
        PrintWriter out = response.getWriter();  
        String userName = null;  
        if (request.getParameter("userName") != null) {  
            userName = request.getParameter("userName");  
        }  
        out.print("userName=" + userName + "!");  
    }
登入後複製

運行測試案例,然後開啟d:/ablog/app.html,將會發現使用者名稱已經印到檔案中。

但是等一下,上面的測試步聚不僅沒有實現自動化,而且比直接打開瀏覽器訪問URL方便,尤其是返回頁面內容較多時。所以我們需要改造上述測試案例,使其可以自動化測試。從前面的文章中可以知道,我們會將頁面中需要顯示的內容,儲存在request物件中,通常是以Map形式存儲,頁面只是從這裡面獲取值,然後打印到頁面上,因此我們可以透過驗證儲存在Map中的內容來自動判斷我們的功能開發是否正確。

好了,下面我們先來實現這個特性。在MainServlet.registerUser中,定義Map model並將其加入到request中,程式碼如下所示:

Map<String, Object> model = new HashMap<String, Object>();  
        long userId = 101;  
        model.put("userId", "" + userId);  
        request.setAttribute("model", model);
登入後複製

在測試案例中我們測試是否正確設定了userId值,程式碼如下所示:

Map<String, Object> model = (Map<String, Object>)request.getAttribute("model");  
            if (model.get("userId") != null && Long.parseLong("" + model.get("userId"))==101) {  
                rst = true;  
            }
登入後複製

這時我們會發現,執行測試案例竟然不能通過!這是正常的,因為我們的HttpJunitRequest物件中沒有實作getAttribute和setAttribute方法,為了讓測試案例可以通過,我們需在HttpJunitRequest中新增如下程式碼:

private final Map<String, Object> attributes = new HashMap<String, Object>();  
  
@Override  
    public Object getAttribute(String key) {  
        return attributes.get(key);  
    }  
  
@Override  
    public void setAttribute(String key, Object value) {  
        attributes.put(key, value);  
    }
登入後複製

這時再執行測試案例,終於可以顯示令我們身心愉悅的綠色通過標誌了。

到目前為止,我們基本上已經建造完成一個可運行的最小系統,並且可以按照TDD的理念進行開發了。

由上面的例子可以看出,我們每次都先想好對一個小功能的測試用例,然後編碼試圖通過這個測試用例,在通過之後,再繼續往上添加新的功能。而每次測試、開發、驗證只需最多二、三十分鐘。透過這種方式編寫的程式碼,基本上都經過了充分的測試,程式碼品質是可以得到一定程度的保障的。

 以上就是新Java運動:測試驅動開發3---用戶註冊的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板