單元測試屬於白盒測試,它是全部測試的第一個環節,也是最重要的一個環節。程序員
它主要是針對一個類的public的方法來作測試。服務器
編寫單元測試是一種驗證類功能的行爲,和優化設計的重要手段,所以它是程序員的工做。ide
編寫單元測試的過程memcached
從測試列表中取出一個測試case工具
定義一個測試方法單元測試
public void Test_{MethodName}_{InputParameter}_{Expectation}測試
{優化
//準備測試數據設計
//執行被測試方法對象
//驗證指望結果
}
準備測試數據
這個主要包括構建被測試方法的參數,模擬被測試方法調用到的依賴對象,並經過set屬性給被測試對象賦值等
執行被測試的方法
驗證指望結果
對被測試方法進行斷言,對模擬對象的被調用狀況進行斷言
這裏是一個具體例子:
[Test]
public void Test_Read_SingleKey_Successful()
{
MemcachedClient memcachedClient = schoonerStorage.MemcacheClient.CacheClient;
//準備測試數據
string businessKey = "100_1";
byte[] returnData = new byte[]{1,23,12,1};
Expect.Call(memcachedClient.Get(businessKey)).Return(returnData);
memcachedClient.Replay();
//執行被測試方法
byte[] actualData = schoonerStorage.Read(businessKey);
//驗證指望結果
Assert.AreEqual(returnData, actualData);
memcachedClient.VerifyAllExpectations();
}
單元測試命名規範
存放測試類的工程命名爲{被測試個工程名}.UnitTest
測試類保持和被測試工程同樣的目錄結構或包結構,而且命名爲{被測試類}Test
測試類中的測試用例採用Test_{被測試方法}_{測試點}_{指望的測試結果}的命名方式
其中{測試點}能夠是參數類型,參數邊界值等等
單元測試注意事項
隔離測試用例的依賴性(目前單元測試工具如xUnit通常會保證這一點)
測試用例要覆蓋到正常工做流程,異常工做流,輸入參數的邊界值等
測試用例的粒度不能太大,若是一個測試用例要驗證的點太多,看能不能拆成更小的用例
測試驅動開發(TDD)
TDD是一種全新的開發模式,其迫使開發人員先編寫單元測試,再編寫產品代碼。其過程以下:
以特性(feature)爲單位,抽象出該特性涉及的相關類和接口,以及它們之間的依賴關係。
針對類編寫測試用例(首先在測試類的頭部列出你要測試列表,而後依照必定的優先級來編寫測試用例)
執行測試用例,用例沒有經過
編寫產品代碼
執行測試用例,用例經過
重複3-5步,完成整個類的測試用例
對產品代碼或測試用例進行重構消除重複設計,並優化代碼結構
確保全部測試用例都經過
提交代碼到產品庫
CI服務器對因此單元測試進行集成測試
若是有任何測試用例失敗,在開發新的產品代碼以前,優先修復失敗的測試用例
TDD有助於開發人員站在使用者角度來開發產品代碼,始終保持產品代碼的簡潔可用。