首頁  >  文章  >  Java  >  新Java運動:測試驅動開發3---使用者註冊2

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

黄舟
黄舟原創
2016-12-30 13:13:111134瀏覽

測試驅動開發(TDD)其實不是一個新概念,但這種方法論的實質經常被誤解。以我為例,我覺得測試驅動開發就是寫單元測試,對程式碼進行充分測試。其實這是一種對測試驅動開發的一種最常見的誤解,測試驅動開發不僅是強調測試,同時更強調驅動開發。編寫測試案例的目的不僅是進行測試,而且是一種設計,是對功能及介面的設計,而且是以功能或介面使用者的角度來進行設計,而其他方法學中的設計,則是在開發人員角度上的設計,因此測試驅動開發更有利於產生好的設計。

但是僅僅通過測試進行設計,運行測試來保證代碼質量,還不足以產生高質量的軟體產品。測試驅動開發同時也強調重構,就是對程式碼不合理的地方進行重構,而且這個重構在每次編寫測試、開發、驗證進程中都需要進行,由於有測試用例進行保證,我們可以放心大膽的進行重構,而不用擔心會導致意想不到的後果出現。

回到我們的專案中,在MainServlet中,我們實現了全部的業務邏輯,但是我們很快就會意識到,如果所有應用邏輯都寫到這個類別中,那個這個類別將變成一個巨無霸,最終會變得不可維護,因此我們需要將用戶註冊業務邏輯實作放到用戶模組中去。大家可以看到,我們已經開始重構我們的系統了。

首先,我們建立user包,在該包下面建立UserMngr類,因為我們預估,用戶模組除了維護用戶基本信息外,還需要維護用戶群組、用戶級別、用戶積分等信息,如果讓調用者完全了解這些細節資訊是沒有必要的,因此我們在這裡使用了Facade模式,所有對使用者的操作都透過UserMngr來進行。程式碼如下所示:

public class UserMngr {  
    public static long registerUser(Map<String, Object> userInfo) {  
        return 101;  
    }  
}

我們看到,在這個類別裡,我們只回傳一個值,什麼也沒做,為的是快速驗證我們的重構架構是可以工作的,具體功能可以在以後添加。另外,要注意的是參數項,這裡用的是Map對象,也就是以類似PHP的數組來傳遞參數。在Java中更常見的作為是為此目的設計一個值物件類,但是這經常造成定義許多值物件類,或者由於共用的需要,一個值物件非常龐大,這裡採用Map來傳遞參數省去了這樣的麻煩。

下面在MainServlet中加入對使用者模組呼叫的程式碼:

private void registerUser(HttpServletRequest request, HttpServletResponse response) 
			throws IOException, ServletException {
		String userName = null;
		if (request.getParameter("userName") != null) {
			userName = request.getParameter("userName");
		}
		Map<String, Object> userInfo = new HashMap<String, Object>();
		userInfo.put("userName", userName);
		long userId = UserMngr.registerUser(userInfo);
		Map<String, Object> model = new HashMap<String, Object>();
		model.put("userId", "" + userId);
		request.setAttribute("model", model);
		/*this.getServletContext().getRequestDispatcher("/caporder/apply_capital.jsp")
			.forward(request, response);*/
	}

下面運行測試案例,應該可以通過,這證明我這次對架構的重構是成功的。

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


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn