時間一長,就開始思考根本原因。我認為Web程序的測試難以進行就在于HTTP是無狀態的通信協議,而在幾乎所有的Web應用程序中,又都需要記錄用戶的狀態。因此有了Cookie和Session這些東西,而這些東西嚴重依賴于瀏覽器和服務器。再者,測試歸根結底是把程序的輸出結果跟預期結果相比較,但Web程序的輸出是什么呢?通常的理解是瀏覽器里顯示的Web頁面,但Web頁面內容在語義上并不十分嚴格,通過簡單檢驗輸出來進行測試既不切實際,也無必要。
退一步說,對于MVC結構的Web程序來講,實質性的代碼有一部分在Model層中。這個Model層應該是和瀏覽器、服務器環境沒有耦合的,這樣才能夠比較方便地進行自動測試。但在Controller部分中通常也會包含重要的流程,而Controller通常都需要Web服務器的配合。
在Java的技術中,“解耦”往往表現得淋漓盡致。Struts 1把程序分成了明顯的M、V、C三部分,但Controller還不得不依賴一些Servlet的API,如HttpServletRequest;到了 Struts 2,不僅不需要Servlet的API,甚至連Struts本身的API都不必依賴。由框架本身統領起整個應用程序,而實際的功能則由類似于掛接在整個機器上的一些小部件來實現,這些小部件并不去使用整個機器的功能,而是由機器統一驅動這些零件來工作。我想這應該就是人們常說的“控制反轉(IoC)”吧。
如果能很好地解耦,才能更順利地實施測試。只要測試的成本變得非常低,低到運行整個測試只需要按一兩個鍵的時候,測試才能真正起到作用。
文章來源于領測軟件測試網 http://www.kjueaiud.com/