2024-10-27 017_學寫API_單元測試的Assert

2024-10-27 017_學寫API_單元測試的Assert

Assert 在單元測試中並不是一個普通的方法,而是一個靜態類 (static class) 中提供的一組方法。這些方法用於驗證測試結果是否符合預期。在單元測試中,Assert 類的主要作用就是斷言,即用來檢查我們寫的程式碼在某些條件下是否能夠得到預期的結果。

Assert 是什麼?

  • Assert 是來自測試框架(如 xUnit、NUnit、MSTest)中的一個類。
  • 它包含了許多靜態方法,用於在測試過程中進行斷言(assertions)
  • 斷言方法的作用是對被測系統的輸出進行驗證,確保它的輸出是我們期望的。如果不符合預期,測試就會失敗

Assert 常用的幾個方法

以下是一些常見的 Assert 方法及它們的用途:

  1. Assert.Equal(expected, actual)

    • 用途:檢查兩個值是否相等。
    • 參數expected 是你預期的結果,actual 是程式實際的輸出。
    • 範例
      1
      2
      3
      int expected = 5;
      int actual = 2 + 3;
      Assert.Equal(expected, actual); // 如果兩者不相等,測試會失敗
    • 說明:這個方法檢查兩個數字、字符串或其他值是否相等,對比的是兩者的值。
  2. Assert.NotNull(object)

    • 用途:檢查某個物件不為 null
    • 範例
      1
      2
      var person = new Person();
      Assert.NotNull(person); // 確保 person 被成功初始化,不是 null
    • 說明:當你希望某個物件已經被初始化時,你可以使用 Assert.NotNull 來檢查。
  3. Assert.True(condition)

    • 用途:檢查條件是否為 true
    • 範例
      1
      2
      bool isAdult = age >= 18;
      Assert.True(isAdult); // 確保 age 的值大於或等於 18
    • 說明:當你需要確認某個條件的結果是 true 時,可以使用 Assert.True
  4. Assert.Throws<T>(Action action)

    • 用途:檢查一個操作是否拋出了預期類型的異常。
    • 範例
      1
      Assert.Throws<ArgumentNullException>(() => someMethod(null));
    • 說明Assert.Throws 方法通常用於測試異常情況,以確保當條件不符合預期時,程式會拋出正確的錯誤。
  5. Assert.IsType<T>(object)

    • 用途:檢查物件是否為指定的類型。
    • 範例
      1
      2
      var result = someMethod();
      Assert.IsType<string>(result); // 檢查 result 是否是字符串類型
    • 說明:這個方法確保一個物件的類型與預期類型相同。

範例:使用 Assert 進行單元測試

假設我們要測試一個計算器類別 Calculator 中的 Add 方法。

1
2
3
4
5
6
7
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}

我們可以寫一個單元測試來測試這個 Add 方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using Xunit;

public class CalculatorTests
{
[Fact]
public void Add_ReturnsCorrectSum()
{
// Arrange
var calculator = new Calculator();

// Act
int result = calculator.Add(2, 3);

// Assert
Assert.Equal(5, result); // 驗證結果是否等於 5
}
}

在這個測試中,我們使用了 Assert.Equal(expected, actual) 來檢查 Add(2, 3) 的結果是否等於 5

如何使用 Assert 構思測試

  1. Arrange:準備測試數據和被測方法。例如創建一個被測對象。
  2. Act:執行被測方法,得到實際的結果。
  3. Assert:使用 Assert 方法來檢查實際結果是否符合預期。

總結

  • Assert 是一組用於驗證測試結果的靜態方法,可以確保程式的輸出符合預期。
  • 使用 Assert 可以幫助開發者自動化檢查結果,減少手動測試的負擔,確保程式碼的正確性和穩定性。
  • 核心概念是斷言輸出與預期結果是否相符,一旦不符合,測試就會失敗並給出具體信息,幫助我們查找和修復錯誤。

如果你在使用 Assert 的過程中遇到具體問題,我可以一步步地幫助你理解如何使用!