寫在前面:
我的TDD實踐這幾篇文章主要是圍繞測試驅動開發所展開的,其中涵蓋了一小部分測試理論,更多的則是關注工具的使用及環境的搭建,做到簡單實踐先行,后理論專精的目的。
UnitTest單元測試
簡介
1. 單元測試
1.1 定義:“單元測試”就是針對一個“工作單元”的測試,一般意義上來講是針對一個基礎類進行輸入/輸出測試。與之相關的是集成測試,驗收測試等。這里指單純意義上的“單元測試”。
1.2 特征:
與其他代碼相隔離:單元測試只測試一件事,否則應該懷疑是否是測試內容有誤。
與其他開發人員隔離:保證最小化的變量影響單元測試,也就是控制變量法。逐漸形成了模擬框架以及依賴注入框架等輔助工具。
有針對性:要做有意義的測試,保證完成那些功能或方法。
可重復:單元測試的最大優勢就是可重復,這也是持續集成的意義所在。
可預測:單元測試保證的是---確定的輸入得到肯定的輸出。
2. 涵蓋內容
2.1 單元測試框架(UnitTest):自從2005年TDD開始流行,框架和工具得到了迅猛的發展,這些框架允許定義測試代碼,控制測試的執行,還提供了一個應用程序運行測試,并在成功完成測試套件中的每個測試后給出報告。
2.2 模擬框架(Mock):為了僅測試一個方法而不對其他發展產生影響或者被影響,產生了Mock框架。通過模擬另一個類的代碼來完成單元測試,同時又充分的隔離了另一個類的部分信息。
2.3 注入框架(inject):為了充分隔離類內部使用的對象,一般采用構造注入的方式或者屬性注入的方式,都是將外部初始化好的對象導入進測試類,以進行隔離。
3. 工具比較
3.1 單元測試工具:
3.1.1 NUnit:目前.net最流行的工具,由JUnit發展而來,簡單易用。 官方網站
3.1.2 MSTest: 也十分的強大,同時也被多種自動編譯工具所支持,在VS2010中十分方便創建以及關聯測試測試類,使用方便。
這是兩個比較主要的測試框架,NUnit更新比較慢,但是開源。兩種工具語法標簽上大同小異,也都支持“Setup”和“Teardown”方便初始化共享對象。
3.2 模擬框架:
3.2.1 Rhino Mock:免費,使用簡單,功能強大。
3.2.2 Type Mock:使用中間語言(IL)在運行時以模擬實現來代替實際實現。商業產品。模擬對象不需要從接口集成,可以模仿第三方類庫。
3.2.3 Moq:社區支持,功能強大,使用簡單。Moq利用了lambda表達式。語法更具描述性。
3.3 注入框架:
3.3.1 Structure Map:開源容器框架,能夠自動模擬容器。
3.3.2 Unity:來自微軟設計與實踐群組。
3.3.3 Autofac:允許不采用XML文件的情況下進行配置。
“我的TDD實踐”系列之TDD概念篇
簡介
1. TDD概念
TDD(Test-Driven Development, 測試驅動開發)已經成為現代軟件開發中非常重要的概念之一。TDD以測試用例為指導要求開發人員,開發出符合測試用例的程序,然后通過測試用例對程序進行驗收,這被叫做“測試先行的開發”。通過,一個很小范圍的功能的開發---驗收過程,增加軟件的內部穩定性,從而在整體上保證了軟件的健壯性。這是與傳統軟件開發流程所不同的地方,也是傳統的軟件開發所達不到的一種軟件開發的“實踐方式”。
2. 發展歷程
2.1 瀑布開發之前:軟件工程的發展初期,由于計算機資源等諸多限制,軟件的規模很小,擁有設備的開發人員更多的趨向于“迭代”開發,獨立完成功能,然后在逐步完善,這是一種早期的迭代開發。
2.2 瀑布式開發: 隨著計算機硬件的提高以及高級語言的出現,開發人員逐漸擺脫硬件的束縛,而逐漸使用高級語言的特性,提高了移植性。有了這些,為大型軟件的開發奠定了基礎。一般定義一個相對大規模的軟件開發(2年或更多),需要經歷的一般過程是: 項目啟動---》需求分析---》架構設計---》代碼設計---》測試---》交付
缺點: 軟件測試時間長,每個過程需等待其他過程完成之后才能進行(效率低),成本高,難度大,修改影響范圍大。
瀑布式開發就像三峽的船閘一樣,每一步都只能等待上一步完成之后才能進行。
原文轉自:http://www.uml.org.cn/Test/201308201.asp