Microsoft.VisualStudio.TestTools.CppUnitTestFramework API 參考

本主題列出 Microsoft::VisualStudio::CppUnitTestFramework 命名空間的公用成員。 您可以使用這些 API 來撰寫以 Microsoft 原生單元測試架構為基礎的 C++ 單元測試。 本主題結尾有使用範例

標頭和 lib 檔案位於 <Visual Studio 安裝資料夾>\VC\Auxiliary\VS\UnitTest 底下。

標頭和 lib 路徑會自動在原生測試專案中設定。

本主題內容

CppUnitTest.h

CppUnitTest.h

建立測試類別和方法

TEST_CLASS(className)

針對每個包含測試方法的類別為必要。 識別 className 為測試類別。 TEST_CLASS 必須在命名空間範圍內宣告。

TEST_METHOD(methodName)
{
    // test method body
}

定義 methodName 為測試方法。 TEST_METHOD 必須在方法的類別範圍中宣告。

初始化和清除

測試方法

TEST_METHOD_INITIALIZE(methodName)
{
    // method initialization code
}

定義 methodName 為每個測試方法執行之前要執行的方法。 TEST_METHOD_INITIALIZE 只能在測試類別中定義一次,且必須在測試類別的範圍中定義。

TEST_METHOD_CLEANUP(methodName)
{
    // test method cleanup  code
}

定義 methodName 為每個測試方法執行之後要執行的方法。 TEST_METHOD_CLEANUP 只能在測試類別中定義一次,且必須在測試類別的範圍中定義。

測試類別

TEST_CLASS_INITIALIZE(methodName)
{
    // test class initialization  code
}

定義 methodName 為每個測試類別建立之前要執行的方法。 TEST_CLASS_INITIALIZE 只能在測試類別中定義一次,且必須在測試類別的範圍中定義。

TEST_CLASS_CLEANUP(methodName)
{
    // test class cleanup  code
}

定義 methodName 為每個測試類別建立之後要執行的方法。 TEST_CLASS_CLEANUP 只能在測試類別中定義一次,且必須在測試類別的範圍中定義。

測試模組

TEST_MODULE_INITIALIZE(methodName)
{
    // module initialization code
}

定義載入模組時要執行的方法 methodNameTEST_MODULE_INITIALIZE 只能在測試模組中定義一次,且必須在命名空間範圍中宣告。

TEST_MODULE_CLEANUP(methodName)

定義卸載模組時要執行的方法 methodNameTEST_MODULE_CLEANUP 只能在測試模組中定義一次,且必須在命名空間範圍中宣告。

建立測試屬性

測試方法屬性

BEGIN_TEST_METHOD_ATTRIBUTE(testMethodName)
    TEST_METHOD_ATTRIBUTE(attributeName, attributeValue)
    ...
END_TEST_METHOD_ATTRIBUTE()

將以一或多個 TEST_METHOD_ATTRIBUTE 巨集定義的屬性加入至測試方法 testMethodName

TEST_METHOD_ATTRIBUTE 巨集會以名稱 attributeName 和值 attributeValue 來定義屬性。

測試類別屬性

BEGIN_TEST_CLASS_ATTRIBUTE(testClassName)
    TEST_CLASS_ATTRIBUTE(attributeName, attributeValue)
    ...
END_TEST_CLASS_ATTRIBUTE()

新增以一或多個 TEST_CLASS_ATTRIBUTE 巨集定義的屬性至測試類別 testClassName

TEST_CLASS_ATTRIBUTE 巨集會以名稱 attributeName 和值 attributeValue 來定義屬性。

測試模組屬性

BEGIN_TEST_MODULE_ATTRIBUTE(testModuleName)
    TEST_MODULE_ATTRIBUTE(attributeName, attributeValue)
    ...
END_TEST_MODULE_ATTRIBUTE()

新增以一或多個 TEST_MODULE_ATTRIBUTE 巨集定義的屬性至測試模組 testModuleName

TEST_MODULE_ATTRIBUTE 巨集會以名稱 attributeName 和值 attributeValue 來定義屬性。

預先定義的屬性

這些預先定義的屬性巨集是提供來為常見案例提供方便性。 它們可以被上述巨集 TEST_METHOD_ATTRIBUTE 取代。

TEST_OWNER(ownerAlias)

以名稱 OwnerownerAlias 的屬性值定義 TEST_METHOD_ATTRIBUTE

TEST_DESCRIPTION(description)

以名稱 Descriptiondescription 的屬性值定義 TEST_METHOD_ATTRIBUTE

TEST_PRIORITY(priority)

以名稱 Prioritypriority 的屬性值定義 TEST_METHOD_ATTRIBUTE

TEST_WORKITEM(workitem)

以名稱 WorkItemworkItem 的屬性值定義 TEST_METHOD_ATTRIBUTE

TEST_IGNORE()

以名稱 Ignoretrue 的屬性值定義 TEST_METHOD_ATTRIBUTE

CppUnitTestAssert.h

一般判斷提示

相等

確認兩個物件相等

template<typename T>
static void Assert::AreEqual(
    const T& expected,
    const T& actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

確認兩個雙精確度浮點數相等

static void Assert::AreEqual(
    double expected,
    double actual,
    double tolerance,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

確認兩個浮點數相等

static void Assert::AreEqual(
    float expected,
    float actual,
    float tolerance,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

確認兩個 char * 字串相等

static void Assert::AreEqual(
    const char* expected,
    const char* actual,
    bool ignoreCase = false,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

確認兩個 w_char * 字串相等

static void Assert::AreEqual(
    const wchar_t* expected,
    const wchar_t* actual,
    bool ignoreCase = false,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

不相等

確認兩個雙精確度浮點數不相等

static void Assert::AreNotEqual(
    double notExpected,
    double actual,
    double tolerance,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

確認兩個浮點數不相等

static void Assert::AreNotEqual(
    float notExpected,
    float actual,
    float tolerance,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

確認兩個 char * 字串不相等

static void Assert::AreNotEqual(
    const char* notExpected,
    const char* actual,
    bool ignoreCase = false,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

確認兩個 w_char * 字串不相等

static void Assert::AreNotEqual(
    const wchar_t* notExpected,
    const wchar_t* actual,
    bool ignoreCase = false,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

根據運算子 ==,確認兩個參考不相等。

template<typename T>
static void Assert::AreNotEqual(
    const T& notExpected,
    const T& actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

相同

確認兩個參考會參考相同的物件執行個體 (識別)。

template<typename T>
static void Assert::AreSame(
    const T& expected,
    const T& actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

不相同

確認兩個參考未參考相同的物件執行個體 (識別)。

template<typename T>
static void Assert::AreNotSame (
    const T& notExpected,
    const T& actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

為 Null

確認指標為 NULL。

template<typename T>
static void Assert::IsNull(
    const T* actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

不是 Null

確認指標不是 NULL

template<typename T>
static void Assert::IsNotNull(
    const T* actual,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

為 True

確認條件為 True

static void Assert::IsTrue(
    bool condition,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

為 False

確認條件為 False

static void Assert::IsFalse(
    bool condition,
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

失敗

強制測試案例結果為失敗

static void Assert::Fail(
    const wchar_t* message = NULL,
    const __LineInfo* pLineInfo = NULL)

Windows 執行階段判斷提示

相等

確認兩個 Windows 執行階段的指標相等。

template<typename T>
static void Assert::AreEqual(
    T^ expected,
    T^ actual,
    Platform::String^ message = nullptr,
    const __LineInfo* pLineInfo= nullptr)

確認兩個 Platform::String^ 字串相等。

template<typename T>
static void Assert::AreEqual(
    T^ expected,
    T^ actual,
    Platform::String^ message= nullptr,
    const __LineInfo* pLineInfo= nullptr)

相同

確認兩個 Windows 執行階段的參考參考相同的物件。

template<typename T>
static void Assert::AreSame(
    T% expected,
    T% actual,
    Platform::String^ message= nullptr,
    const __LineInfo* pLineInfo= nullptr)

不相等

確認兩個 Windows 執行階段的指標不相等。

template<typename T>
static void Assert::AreNotEqual(
    T^ notExpected,
    T^ actual,
    Platform::String^ message = nullptr,
    const __LineInfo* pLineInfo= nullptr)

確認兩個 Platform::String^ 字串不相等。

static void Assert::AreNotEqual(
    Platform::String^ notExpected,
    Platform::String^ actual,
    bool ignoreCase = false,
    Platform::String^ message= nullptr,
    const __LineInfo* pLineInfo= nullptr)

不相同

確認兩個 Windows 執行階段參考未參考相同的物件。

template<typename T>
static void Assert::AreNotSame(
    T% notExpected,
    T% actual,
    Platform::String^ message= nullptr,
    const __LineInfo* pLineInfo= nullptr)

為 Null

確認 Windows 執行階段指標為 nullptr。

template<typename T>
static void Assert::IsNull(
    T^ actual,
    Platform::String^ message = nullptr,
    const __LineInfo* pLineInfo= nullptr)

不是 Null

確認 Windows 執行階段指標不是 nullptr。

template<typename T>
static void Assert::IsNotNull(
    T^ actual,
    Platform::String^ message= nullptr,
    const __LineInfo* pLineInfo= nullptr)

判斷提示例外狀況

預期例外狀況

確認函式引發例外狀況︰

template<typename _EXPECTEDEXCEPTION, typename _FUNCTOR>
static void Assert::ExpectException(
    _FUNCTOR functor,
    const wchar_t* message= NULL,
    const __LineInfo* pLineInfo= NULL)

確認函式引發例外狀況︰

template<typename _EXPECTEDEXCEPTION, typename _RETURNTYPE>
    static void Assert::ExpectException(
    _RETURNTYPE (*func)(),
    const wchar_t* message= NULL,
    const __LineInfo* pLineInfo = NULL)

CppUnitTestLogger.h

記錄器

記錄器類別包含要寫入至 [輸出視窗] 的靜態方法。

寫入訊息

將字串寫入至 [輸出視窗]

static void Logger::WriteMessage(const wchar_t* message)
static void Logger::WriteMessage(const char* message)

範例

此程式碼是 VSCppUnit 的使用範例。 其中包含屬性中繼資料、裝置、使用判斷提示的單元測試及自訂記錄等範例。

// USAGE EXAMPLE

#include <CppUnitTest.h>

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

BEGIN_TEST_MODULE_ATTRIBUTE()
    TEST_MODULE_ATTRIBUTE(L"Date", L"2010/6/12")
END_TEST_MODULE_ATTRIBUTE()

TEST_MODULE_INITIALIZE(ModuleInitialize)
{
    Logger::WriteMessage("In Module Initialize");
}

TEST_MODULE_CLEANUP(ModuleCleanup)
{
    Logger::WriteMessage("In Module Cleanup");
}

TEST_CLASS(Class1)
{

public:

    Class1()
    {
        Logger::WriteMessage("In Class1");
    }

    ~Class1()
    {
        Logger::WriteMessage("In ~Class1");
    }

    TEST_CLASS_INITIALIZE(ClassInitialize)
    {
        Logger::WriteMessage("In Class Initialize");
    }

    TEST_CLASS_CLEANUP(ClassCleanup)
    {
        Logger::WriteMessage("In Class Cleanup");
    }

    BEGIN_TEST_METHOD_ATTRIBUTE(Method1)
        TEST_OWNER(L"OwnerName")
        TEST_PRIORITY(1)
    END_TEST_METHOD_ATTRIBUTE()

    TEST_METHOD(Method1)
    {
        Logger::WriteMessage("In Method1");
        Assert::AreEqual(0, 0);
    }

    TEST_METHOD(Method2)
    {
        Assert::Fail(L"Fail");
    }
};

另請參閱