Skip to content

Latest commit

 

History

History
77 lines (57 loc) · 2.5 KB

README.md

File metadata and controls

77 lines (57 loc) · 2.5 KB

MSTest Enhancer

在 MSTestEnhancer 的幫助下,單元測試將更加容易編寫、理解和維護。因為它讓單元測試方法和被測類本身之間的關係更加緊密。

如何開始

  1. 在單元測試項目中安裝 NuGet 包:MSTestEnhancer
  2. 現在就可以開始編寫下文那種風格的單元測試代碼了。

推薦的單元測試編寫方式

假設你希望測試一個名為 被測類名 的類,其中包含一個名為 被測方法名 的方法。你可以這樣編寫單元測試:

[TestClass]
public class 被測類名Test
{
    [ContractTestCase]
    public void 被測方法名()
    {
        "契約 1(當 Xxx 時,應該發生 Yyy)".Test(() =>
        {
            // 測試用例代碼
        });
        
        "契約 2(但當 Zzz 時,應該發生 Www)".Test(() =>
        {
            // 測試用例代碼
        });
    }
}

注意到單元測試類的名稱和原本的類名稱是一一對應的,方法名和原本的方法名是一模一樣的;於是,我們不再需要為任何一個單元測試思考命名問題。

單元測試結果頁

參數化的單元測試

有些契約需要更多的值組合來驗證正確性,那麼可以在契約測試用例的後面添加參數。

"質數".Test((int num) =>
{
    // 測試用例代碼
}).WithArguments(2, 3, 5, 7, 11);

"{0} 不是質數".Test((int num) =>
{
    // 測試用例代碼
}).WithArguments(1, 4);

也可以添加多個參數(最多支持 8 個):

"契約 1,參數中可以帶 {0} 和 {1}。".Test((int a, int b) =>
{
    // 現在,a 會等於 2,b 會等於 3。
}).WithArguments(2, 3);

"契約 2".Test((int a, int b) =>
{
    // 現在有兩組代碼,一組 a=2, b=3;另一組 a=10, b=20。
    // 當然也可以傳入元組數組。
}).WithArguments((2, 3), (10, 20));

在顯示單元測試結果時,如果契約字符串中含有格式化佔位符 {0}{1} 等,會被自動替換為參數的值。

異步的單元測試

Test 方法中傳入的每個 Action 都支持 async 關鍵字,並會在執行測試用例時等待異步操作結束。

額外的黑科技

MSTest v2 支持嵌套類型的單元測試。也就是說,我們可以利用這一點做出近乎無限層級的單元測試樹出來。