AOP 使編寫特定于應用程序的橫切關注點測試比任何時候都要容易了。要了解其原因以及如何實現,請聽 Nicholas Lesiecki 介紹測試面向方面的代碼所具有的好處,并展示在 AspectJ 中測試橫切行為的樣式。
在過去五年中廣泛采用的程序員測試是由顯著的生產率和得到的代碼質量所驅動的。不過,在面向方面編程(AOP)出現之前,為橫切行為(如安全、事務管理或者持久性)編寫測試很困難。為什么呢?因為這些行為沒有很好地模塊化。如果沒有可測試的單元,那么就很難編寫出單元測試。隨著 AOP 的普及,編寫與橫切關注點在目標系統中的實現無關的、對其進行檢查的測試已變得可行并且值得去做。
在本文中,我將介紹測試用方面實現的橫切行為的一組技術。重點放在方面的單元測試,但是我也展示了有助于建立對面向方面應用程序的信任度的其他模式。很快您就會看到,測試方面涉及許多與測試對象相同的技巧和概念,并且有許多相同的做法和設計好處。
本文的撰寫基于我在 AspectJ 中的經驗。許多概念應當可以移植到其他 AOP 實現中,但是有些概念是特定于語言的。請參閱 下?lt;/A> 以下載本文源代碼,請參閱 參考資料 以下載完成例子所需要的 Aspectj 和 AJDT。
面向方面代碼的單元測試
應用程序的好的自動測試集應當像圖 1 那樣:以隔離的、對各個類的測試構成一個廣泛的基礎,使測試覆蓋面廣,并能迅速分離出錯誤。在這之上是集成的、端到端的系統測試,它驗證各單元是否可以協調工作。如果這些層是良構的并且頻繁運行,那么它們結合在一起可以增加對于應用程序行為的信任度。
在金字塔底部的單元測試很重要,這有幾個理由。首先,它們幫助您產生那些在集成測試中難于再現或者需要繁瑣步驟才能再現的關注點用例。其次,由于它們涉及的代碼更少,因此它們運行起來通常更快(因此可以更經常地運行它們)。第三,它們可以幫助您思考每個單元的接口和要求。好的單元測試要求單元間的松散耦合,這是在測試條件下讓測試得以運行的條件。
圖 1. 分層的測試
但是橫切行為會怎么樣呢?想像一位客戶的要求:“在執行對 ATM 類的任何操作之前要檢查調用者的安全憑證!碑斎豢梢裕ú⑶覒摚┽槍@項要求編寫集成測試。不過,非面向對象的開發環境使得編寫“在操作之前檢查安全性”這種行為的單元測試很難將這種行為分離出來。這是因為行為混入到了目標系統中,讓人很難把握或者用工具分析。但是如果用方面開發,那么就可以將這些行為表示為建議(advice),應用到所有匹配某個切點(pointcut)的操作,F在行為就可以很好地用單元表示,可以在隔離的情況下測試或者在 IDE 顯示它。
面向方面的代碼在哪里出現問題了
文章來源于領測軟件測試網 http://www.kjueaiud.com/