一、引言
測試驅動開發在減少開發努力的同時也改進了軟件的開發質量。單元測試,作為一整套測試策略的基礎,必須是全面的,且要求易于建立和執行迅速。然而,對執行環境和被測試類外部代碼的依賴性使我們實現這些目標變得更為復雜。例如,把應用程序發布到容器將顯著地延長代碼和測試的周期;而對其它類的依賴性通常也會導致測試的建立更加復雜和測試運行速度更為緩慢。
集成兩個流行的測試框架(StrutsTestCase和EasyMock)來單元測試Struts應用程序將會更為容易地建立測試并加快測試速度。然而,這兩個框架之間尚存在一些“隔閡”,從而很難把它們理想地集成到一起。在本文中,我將通過分析兩種方案(一個面向對象的方案和一個面向方面的方案)來探討這個問題。同時,我還將展示面向方面編程(AOP)是如何通過簡化一些看起來很困難的問題的解決方案而進一步補充面向對象編程(OOP)的。
二、集成需要
一個典型的Struts應用程序既能夠展示也其所使用的執行環境也會體現出類之間的依賴性問題;這是因為Struts行為(Action)是在一個servlet容器內執行的,并且典型情況下會調用其它的類來處理請求。模擬對象測試方法有助于消除其中不必要的依賴性。借助于繼承自基本JUnit測試集的MockStrutsTestCase類,StrutsTestCase測試框架提供了對servlet容器的一種模擬實現。這顯然方便了容器外測試,因而也相應地加快了單元測試周期。另一方面,另一個測試框架—EasyMock—進一步便利了對協作類的動態模擬(Mock)。這個框架中所提供的模擬能夠用更簡單的實現來代替真正的類,并且添加了校驗邏輯以支持單元測試。
非常清楚,把這兩個框架結合在一起是非常有益的—Struts應用程序便可以在非常真實的隔離環境下進行測試。理想情況下,你需要使用下列步驟來實現這樣的一個單元測試:
1.建立MockStrutsTestCase以便模擬servlet容器。
2.借助于EasyMock來模擬行為所依賴的類。
3.設置模擬的期望值。
文章來源于領測軟件測試網 http://www.k11sc111.com/