[91大的TDD課程心得] 測試框架 MSTest

測試框架能夠提高撰寫 Unit Test 的便利性,增加導入的誘因!

好框架,不用嗎?

MSTest 是 Visual Studio 內建的一款測試框架,可以完成基本的 Unit Test 需求

常使用的驗證方法有:

  • Assert:基本驗證
  • CollectionAssert:集合驗證
  • ExpectedException:例外驗證

常用的 Hook 方式有六種(3*2)組合:

  • Class、Test、Assembly
  • Initialize、Cleanup

※ 例:ClassInitialize 就是 Class 初始化時,會進入的 Function

相關 Attribute:

  • [TestCategory("assert exception")]
  • [Ignore]

 

MSTest 提供了上述總總的便捷功能,但還是有許多不足:

  • 物件、物件集合、組合物件無法方便的直接比較是否相等
    ※ 屬性攤開來比嗎?只能知道至少有哪個不相等,不知道整體共有哪些不相等
  • 無法便捷的比較兩個物件是否相等
    ※ 上述兩點用了 ExpectedObjects 後,人生變得更彩色!
    expected.ToExpectedObject().ShouldEqual(actual);
     
  • ExpectedException 不符 3A 原則、也無法確定是不是目標 funciton 吐出的 Exception
    ※ 用 FluentAssertions 的方法改寫,棒棒的~
    Action act = () => Divide(a, b);
    act.ShouldThrow();

ExpectedObjects FluentAssertions 可從
Solution Explorer -> [References] 右鍵 -> Manage NuGet Packages.. 的介面安裝

特別注意,不是 FluentAssert

※ 建議團隊訂定統一的撰寫標準,例如 target、actual、expected 等關鍵字

※ Actual 及 Excepted 寫反了或許不影響 Unit Test 結果,但會影響 Test Fail 的訊息判讀

※ Unit Test function 最花腦力的地方往往在於 funciton name 的訂定...

※ 善用 「Ctrl + R, T」、「Ctrl + R, A」、「Ctrl + R,  Ctrl + T」 等快捷鍵
「Ctrl + R,  Ctrl + A」幾乎不會用,別浪費時間了~

※ 即便內建的 MSTest 框架不是那麼完善好用,但畢竟他是內建的,還是得學習瞭解

※ Unit Test function 裡頭盡可能以直述句撰寫,不該出現 if else try catch 等關鍵字