測試框架能夠提高撰寫 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 等關鍵字