2024-10-27 017_學寫API_單元測試的Assert
2024-10-27 017_學寫API_單元測試的Assert
Assert
在單元測試中並不是一個普通的方法,而是一個靜態類 (static class
) 中提供的一組方法。這些方法用於驗證測試結果是否符合預期。在單元測試中,Assert
類的主要作用就是斷言,即用來檢查我們寫的程式碼在某些條件下是否能夠得到預期的結果。
Assert 是什麼?
Assert
是來自測試框架(如 xUnit、NUnit、MSTest)中的一個類。- 它包含了許多靜態方法,用於在測試過程中進行斷言(assertions)。
- 斷言方法的作用是對被測系統的輸出進行驗證,確保它的輸出是我們期望的。如果不符合預期,測試就會失敗。
Assert 常用的幾個方法
以下是一些常見的 Assert
方法及它們的用途:
Assert.Equal(expected, actual)
- 用途:檢查兩個值是否相等。
- 參數:
expected
是你預期的結果,actual
是程式實際的輸出。 - 範例:
1
2
3int expected = 5;
int actual = 2 + 3;
Assert.Equal(expected, actual); // 如果兩者不相等,測試會失敗 - 說明:這個方法檢查兩個數字、字符串或其他值是否相等,對比的是兩者的值。
Assert.NotNull(object)
- 用途:檢查某個物件不為
null
。 - 範例:
1
2var person = new Person();
Assert.NotNull(person); // 確保 person 被成功初始化,不是 null - 說明:當你希望某個物件已經被初始化時,你可以使用
Assert.NotNull
來檢查。
- 用途:檢查某個物件不為
Assert.True(condition)
- 用途:檢查條件是否為
true
。 - 範例:
1
2bool isAdult = age >= 18;
Assert.True(isAdult); // 確保 age 的值大於或等於 18 - 說明:當你需要確認某個條件的結果是
true
時,可以使用Assert.True
。
- 用途:檢查條件是否為
Assert.Throws<T>(Action action)
- 用途:檢查一個操作是否拋出了預期類型的異常。
- 範例:
1
Assert.Throws<ArgumentNullException>(() => someMethod(null));
- 說明:
Assert.Throws
方法通常用於測試異常情況,以確保當條件不符合預期時,程式會拋出正確的錯誤。
Assert.IsType<T>(object)
- 用途:檢查物件是否為指定的類型。
- 範例:
1
2var result = someMethod();
Assert.IsType<string>(result); // 檢查 result 是否是字符串類型 - 說明:這個方法確保一個物件的類型與預期類型相同。
範例:使用 Assert 進行單元測試
假設我們要測試一個計算器類別 Calculator
中的 Add
方法。
1 | public class Calculator |
我們可以寫一個單元測試來測試這個 Add
方法:
1 | using Xunit; |
在這個測試中,我們使用了 Assert.Equal(expected, actual)
來檢查 Add(2, 3)
的結果是否等於 5
。
如何使用 Assert 構思測試
- Arrange:準備測試數據和被測方法。例如創建一個被測對象。
- Act:執行被測方法,得到實際的結果。
- Assert:使用
Assert
方法來檢查實際結果是否符合預期。
總結
Assert
是一組用於驗證測試結果的靜態方法,可以確保程式的輸出符合預期。- 使用
Assert
可以幫助開發者自動化檢查結果,減少手動測試的負擔,確保程式碼的正確性和穩定性。 - 核心概念是斷言輸出與預期結果是否相符,一旦不符合,測試就會失敗並給出具體信息,幫助我們查找和修復錯誤。
如果你在使用 Assert
的過程中遇到具體問題,我可以一步步地幫助你理解如何使用!