TDD實務開發筆記
2016年5月23日 星期一
什麼是Unit Test
- 最小的測試單位
粒度最小,以class來說指的是一個方法, - 外部相依為零
不應該與network、file、class相依 - 不具備商業邏輯
不會有if else 之類的判斷 - 測試案例之間相依性為零
這樣才可以精準的測試出哪個地方有問題 - 一個測試案例只測一件事
不能跟其它案例有相依性,會影響測試結果
Unit Test 特性:First
- Fast:
建議需低於500亳秒,高於1秒需要檢查是否有哪裡有問題,第一次起Test可能需要較久時間可排除
若時間拉太長會影響開發節奏,讓開發速度變慢 - Independent:
獨立性,不應該跟其它測試有相依性 - Repeatable:
確保每次執行結果都一樣(在不改Code情況下) - Self-validating:
自我驗證,測試完後即可馬上看到結果,不需要經過query db或是查看檔案 - Timely:
時效,通常都會開發好與測試的code一起commit,若不馬上做則會有偷懶的行為發生
3A原則
1. arrage- 初始化目標物件
- 初始化方法參數
- 建立模擬物件行為
- 設定環境變數期望結果
- 實際呼叫測試目標物件的方法
- 驗證目標物件是否如同預期運作
範例:
如果驗證以下的方法public class MyCalculator { public int Add(int first, int second) { return first + second; } }
解法:
//先想好自已的Scenario //例:傳入first:1,second:2,最後回傳值一定是3 [TestMethod()] public void AddTest_First_1_Second_2_Should_be_3() { //3A原則 //arrange var target = new MyCalculator(); var first = 1; var second = 2; var excepted = 3; //act var actual = target.Add(first, second); //assert Assert.AreEqual(excepted, actual); }
Ms Test 相關簡介
Test 標記
- Test Class :測試類別
- Test Method:測試方法
驗證:
- Assert(基本驗證):預期expected是否等是實際actual
- CollectionAssert(集合驗證 ):一般陣列的驗證,好處不用用迴圈來一個一個驗證
- ExceptedException(例外驗證):不能用try catch,所以要用專屬的驗證方式
Hook
- ClassInitialize:每個測試類別開始前跑一次
- ClassCleanup:每個測試類別結束前跑一次
- TestInitialize:每個測試開始前跑一次
- TestCleanup:每個測試結束後跑一次
- AssemblyInitialize:整個測試專案開始前跑一次
- AssemblyCleanup:整個測試專案結束後跑一次
- TestContext:用WriteLine()即可印出
測試相關Attribute
- TestCategory(assert excetipn) ==>分類tag
- Ignore==>略過此測試方法
熱鍵
Ctrl+R+T:執行單一測試
Ctrl+R,Ctrl+T:偵錯單一測試
Ctrl+R+A:執行所有測試
Ctrl+R,Ctrl+A:偵錯所有測試
0 意見:
張貼留言