使用 Assert 類別

請使用 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 類別產生測試。 您將會看到類似下列範例的產生程式碼:

[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

概念

針對現有的程式碼建立和執行單元測試