用戶註冊流程是用戶輸入用戶名和密碼,然後正確將用戶基本資訊和帳戶資訊建立到資料庫中去。
讓我們先從簡單的步聚做起,第一步是寫一個測試用例,傳入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
好了,下面我們先來實現這個特性。在MainServlet.registerUser中,定義Map
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)!