TDD實務開發筆記

2016年5月23日 星期一

什麼是Unit Test

  1. 最小的測試單位
    粒度最小,以class來說指的是一個方法,
  2. 外部相依為零
    不應該與network、file、class相依
  3. 不具備商業邏輯
    不會有if else 之類的判斷
  4. 測試案例之間相依性為零
    這樣才可以精準的測試出哪個地方有問題
  5. 一個測試案例只測一件事
    不能跟其它案例有相依性,會影響測試結果

Unit Test 特性:First

  1. Fast:
    建議需低於500亳秒,高於1秒需要檢查是否有哪裡有問題,第一次起Test可能需要較久時間可排除
    若時間拉太長會影響開發節奏,讓開發速度變慢
  2. Independent:
    獨立性,不應該跟其它測試有相依性
  3. Repeatable:
    確保每次執行結果都一樣(在不改Code情況下)
  4. Self-validating:
    自我驗證,測試完後即可馬上看到結果,不需要經過query db或是查看檔案
  5. Timely:
    時效,通常都會開發好與測試的code一起commit,若不馬上做則會有偷懶的行為發生

3A原則

1. arrage
  • 初始化目標物件
  • 初始化方法參數
  • 建立模擬物件行為
  • 設定環境變數期望結果
2.act
  • 實際呼叫測試目標物件的方法
3.assert
  • 驗證目標物件是否如同預期運作


範例:

如果驗證以下的方法
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 意見: