使用 Assert 類別
更新:2007 年 11 月
請使用 UnitTestingFramework 命名空間的 Assert 類別,以驗證特定功能。單元測試方法會執行開發程式碼中方法的程式碼,但是只有在加入 Assert 陳述式時,才會產生程式碼的行為方面的報告。
注意事項: |
---|
無論是否加入 Assert 陳述式,單元測試都會產生程式碼涵蓋範圍資料。如需詳細資訊,請參閱 HOW TO:取得程式碼涵蓋範圍資料。 |
Assert 的種類
Microsoft.VisualStudio.TestTools.UnitTesting 命名空間提供數種 Assert 類別:
在測試方法中,您可以呼叫任何數目的 Assert 類別方法,例如 Assert.AreEqual()。Assert 類別具有許多可用的方法,而那其中有許多方法具有數個多載。
請使用 CollectionAssert 類別比較物件的集合,並驗證一或多個集合的狀態。
請使用 StringAssert 類別比較字串。這個類別包含各種有用的方法,例如 StringAssert.Contains、StringAssert.Matches 和 StringAssert.StartsWith。
每當測試失敗時,都會擲回 AssertFailedException 例外狀況。如果測試逾時、擲回未預期的例外狀況,或有 Assert 陳述式產生失敗的結果,則測試失敗。
每當測試產生結果不明的結果時,就會擲回 AssertInconclusiveException。一般而言,建議將 Assert.Inconclusive 陳述式加入至仍在處理的測試,以指示測試未準備好執行。
注意事項: |
---|
另一個方法就是,利用 Ignore 屬性 (Attribute) 標示未準備好執行的測試。不過,這個方法有個缺點,就是您無法根據尚未實作的測試數目輕易地產生報告。 |
如果您撰寫新的 Assert 例外狀況類別,那麼讓該類別繼承自基底類別 UnitTestAssertException,便可以更輕鬆地將例外狀況識別為判斷提示 (Assertion) 失敗,而非測試或實際執行程式碼所擲回的未預期例外狀況。
當您希望測試方法驗證預期由開發程式碼之方法擲回的例外狀況,確實是由該方法擲回,請使用 ExpectedExceptionAttribute 屬性裝飾測試方法。
多載化具有 Assert.AreEqual 的 Unsafe 型別
Assert.AreEqual 方法具有多個多載,可讓您比較特定資料型別。然而,Assert.AreEqual 方法並沒有用於 unsafe 型別的多載,例如指標資料型別。
為了說明這點,請建立包含下列類別的 C# 主控台應用程式:
unsafe public class CUnsafeTest
{
private int* m_pX = null;
unsafe public void VoidPtr(void* voidPtr)
{
}
unsafe public int* ReturnPointer(float* fPtr, TestThis* pTestThis)
{
int x = 5;
return &x;
}
}
立即為 CunsafeTest 類別產生測試。如需詳細資訊,請參閱 HOW TO:產生單元測試。您將會看到類似下列範例的產生程式碼:
[TestMethod()]
public void ReturnPointerTest()
{
unsafe
{
CodeGen.BVT.Unsafe.CUnsafeTest target;
target = new CodeGen.BVT.Unsafe.CUnsafeTest();
// TODO: Initialize to an appropriate value
System.Single* fPtr = null;
// TODO: Initialize to an appropriate value
TestThis* pTestThis = null;
// TODO: Initialize to an appropriate value
System.Int32* expected = null;
System.Int32* actual;
actual = target.ReturnPointer(fPtr, pTestThis);
Assert.AreEqual(actual, expected);
// On the preceding line, no overload is available.
}
}
在這個情況中,您可以使用自己的自訂驗證程式碼取代 Assert.AreEqual 陳述式。