共用方式為


使用 Assert 類別

更新:2007 年 11 月

請使用 UnitTestingFramework 命名空間的 Assert 類別,以驗證特定功能。單元測試方法會執行開發程式碼中方法的程式碼,但是只有在加入 Assert 陳述式時,才會產生程式碼的行為方面的報告。

注意事項:

無論是否加入 Assert 陳述式,單元測試都會產生程式碼涵蓋範圍資料。如需詳細資訊,請參閱 HOW TO:取得程式碼涵蓋範圍資料

Assert 的種類

Microsoft.VisualStudio.TestTools.UnitTesting 命名空間提供數種 Assert 類別:

Assert

在測試方法中,您可以呼叫任何數目的 Assert 類別方法,例如 Assert.AreEqual()。Assert 類別具有許多可用的方法,而那其中有許多方法具有數個多載。

CollectionAssert

請使用 CollectionAssert 類別比較物件的集合,並驗證一或多個集合的狀態。

StringAssert

請使用 StringAssert 類別比較字串。這個類別包含各種有用的方法,例如 StringAssert.Contains、StringAssert.Matches 和 StringAssert.StartsWith。

AssertFailedException

每當測試失敗時,都會擲回 AssertFailedException 例外狀況。如果測試逾時、擲回未預期的例外狀況,或有 Assert 陳述式產生失敗的結果,則測試失敗。

AssertInconclusiveException

每當測試產生結果不明的結果時,就會擲回 AssertInconclusiveException。一般而言,建議將 Assert.Inconclusive 陳述式加入至仍在處理的測試,以指示測試未準備好執行。

注意事項:

另一個方法就是,利用 Ignore 屬性 (Attribute) 標示未準備好執行的測試。不過,這個方法有個缺點,就是您無法根據尚未實作的測試數目輕易地產生報告。

UnitTestAssertException

如果您撰寫新的 Assert 例外狀況類別,那麼讓該類別繼承自基底類別 UnitTestAssertException,便可以更輕鬆地將例外狀況識別為判斷提示 (Assertion) 失敗,而非測試或實際執行程式碼所擲回的未預期例外狀況。

ExpectedExceptionAttribute

當您希望測試方法驗證預期由開發程式碼之方法擲回的例外狀況,確實是由該方法擲回,請使用 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 陳述式。

請參閱

概念

單元測試架構

參考

Microsoft.VisualStudio.TestTools.UnitTesting