前言
撰寫單元測試有 3A 架構:
- Arrange:
初始化測試環境,例如需要使用到的參數設定,建立模擬物件或是存根物件。 - Act:
執行測試對象。 - Assert:
驗證結果,驗證對象分為三種,回傳值、物件狀態及互動關係。
其中對於第三個步驟的判斷語句,對於撰寫測試程式初期較陌生的部分,因為一般的程式開發場景不會有這樣的斷言,此處的判斷撰寫亦與開發時使用的判斷處理不同,算是撰寫測試程式需要額外學習之處。
以下就一般常用的斷言語句作簡單介紹。
個別比對
Assert 類別提供多個針對物件的比對方法。
AreSame 方法
用於比對兩個物件是否為同一物件,比對是採用變數的位址是否相同進行判斷,因此下述測試的判斷將不會通過。
[TestMethod]
public void Example_AreSame()
{
var sExpected = "abc";
var sActual = "abc";
Assert.AreSame(sExpected, sActual);
}
AreEqual 方法
採用變數型別的 Equals 方法進行比對,若沒有定義則採用 Object 型別的 Equals 方法進行比對,亦即採用比對位址的方式。
[TestMethod]
public void Example_AreEqual()
{
var sExpected = "abc";
var sActual = "abc";
Assert.AreEqual(sExpected, sActual);
}
集合比對
CollectionAssert 類別提供多個針對清單集合的比對方法,假設有一組預期值的集合如下:
| 排序 | 1 | 2 | 3 |
|---|---|---|---|
| 內容 | UserA | UserB | UserC |
AreEqual 方法
用於完整比對,當兩個清單內容必須在內容值、數目且順序都保待一致的情形時使用。所以下述的情形都不會通過,因為項目的排序與預期值不符。
| 排序 | 1 | 2 | 3 |
|---|---|---|---|
| 內容 | UserA | UserC | UserB |
AreEquivalent
用於項目內容比對,當兩個清單內容及數量一致時即可,不考慮項目在序列中的順序。所以前述順序不同的情形是可以通過檢查。
| 排序 | 1 | 2 | 3 |
|---|---|---|---|
| 內容 | UserA | UserC | UserB |
但下述情形則因為數量不一致所以並不會通過檢查。
| 排序 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| 內容 | UserA | UserC | UserC | UserB |