共用方式為


使用 Microsoft.VisualStudio.TestTools.CppUnitTestFramework

本主題列出 Microsoft::VisualStudio::CppUnitTestFramework 命名空間的公用成員。

標頭檔位於 VisualStudio2012[x86]InstallFolder**\VC\UnitTest\include** 資料夾。

LIB 檔案位於 VisualStudio2012[x86]InstallFolder**\VC\UnitTest\lib** 資料夾。

本主題內容

CppUnitTest.h

  • 建立測試類別和方法

  • 初始化並清除

    • 測試方法。

    • 測試類別

    • 測試模組

  • 建立測試屬性

    • 測試方法屬性

    • 測試類別屬性

    • 測試模組屬性

    • 預先定義的屬性。

    CppUnitTestAssert.h

    • 一般判斷提示

      • 相等

      • 不相等

      • 相同。

      • 不相同。

      • 為 Null。

      • 不是 Null。

      • 為 True。

      • 為 False。

      • 失敗

    • 在執行階段判斷提示

      • 相等

      • 相同。

      • 不相等

      • 不相同。

      • 為 Null。

      • 不是 Null。

    • 例外狀況判斷提示

      • 預期的例外狀況。

      CppUnitTestLogger.h

      • 記錄器

      • 寫入訊息

CppUnitTest.h

Hh694604.collapse_all(zh-tw,VS.110).gif建立測試類別和方法

TEST_CLASS(className)

要求包含測試方法的每一個類別。 識別 className 做為測試類別。 必須在 namescape 範圍宣告TEST_CLASS 。

TEST_METHOD(methodName) 
{
    // test method body
}

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

Hh694604.collapse_all(zh-tw,VS.110).gif初始化並清除

Hh694604.collapse_all(zh-tw,VS.110).gif測試方法。

TEST_METHOD_INITIALIZE(methodName) 
{
    // method initialization code
}

將methodName 定義成會先於測試方法執行的方法。 TEST_METHOD_INITIALIZE 在測試類別中必須定義,而且只能定義一次。

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

定義 methodName 做為執行的方法,以便在每個測試方法執行後執行。 在測試類別的範圍內,TEST_METHOD_CLEANUP 必須定義,而且只能定義一次。

Hh694604.collapse_all(zh-tw,VS.110).gif測試類別

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

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

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

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

Hh694604.collapse_all(zh-tw,VS.110).gif測試模組

TEST_MODULE_INITIALIZE(methodName)
{
    // module initialization code
}

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

TEST_MODULE_CLEANUP(methodName)

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

Hh694604.collapse_all(zh-tw,VS.110).gif建立測試屬性

Hh694604.collapse_all(zh-tw,VS.110).gif測試方法屬性

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

將屬性定義為一或多個 TEST_METHOD_ATTRIBUTE 巨集,並加入至測試方法 testClassName。

TEST_METHOD_ATTRIBUTE 巨集定義使用名稱 attributeName 和值 attributeValue的屬性。

Hh694604.collapse_all(zh-tw,VS.110).gif測試類別屬性

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

將定義為一或多個 TEST_CLASS_ATTRIBUTE 巨集的屬性加入至測試類別 testClassName。

TEST_CLASS_ATTRIBUTE 巨集定義使用名稱 attributeName 和值 attributeValue的屬性。

Hh694604.collapse_all(zh-tw,VS.110).gif測試模組屬性

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

將定義為一或多個 TEST_MODULE_ATTRIBUTE 巨集的屬性加入至測試模組 testModuleName。

TEST_MODULE_ATTRIBUTE 巨集定義使用名稱 attributeName 和值 attributeValue的屬性。

Hh694604.collapse_all(zh-tw,VS.110).gif預先定義的屬性。

這些預先定義的屬性巨集可以用巨集 TEST_METHOD_ATTRIBUTE、 TEST_CLASS_ATTRIBUTE或上方所描述的 TEST_MODULE_ATTRIBUTE 替代。

TEST_OWNER(ownerAlias)

定義使用名稱 Owner 且屬性值為 ownerAlias的屬性。

TEST_DESCRIPTION(description)

定義使用名稱Description 且屬性值為 描述的屬性。

TEST_PRIORITY(priority)

定義使用名稱 Priority 且屬性值為 優先順序的屬性。

TEST_WORKITEM(workitem)

定義使用名稱 WorkItem 且屬性值為workItem的屬性。

TEST_IGNORE()

定義使用名稱 Ignore 且屬性值為 true的屬性。

CppUnitTestAssert.h

Hh694604.collapse_all(zh-tw,VS.110).gif一般判斷提示

Hh694604.collapse_all(zh-tw,VS.110).gif相等

驗證兩個物件相等

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

驗證兩個雙精度浮點數相等

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

驗證兩個浮點數相等

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

驗證兩個字串相等 char*

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

驗證兩個 w_char*字串相等

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

Hh694604.collapse_all(zh-tw,VS.110).gif不相等

驗證兩個雙精度浮點數不相等

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

驗證兩個浮點數不相等

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

驗證兩個 char*字串不相等

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

驗證兩個 w_char*字串不相等

static void 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 AreNotEqual(
    const T& notExpected, 
    const T& actual, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

Hh694604.collapse_all(zh-tw,VS.110).gif相同。

驗證兩個參考是否參考相同的物件執行個體 (識別)。

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

Hh694604.collapse_all(zh-tw,VS.110).gif不相同。

驗證兩個參考並未參考相同的物件執行個體 (識別)。

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

Hh694604.collapse_all(zh-tw,VS.110).gif為 Null。

驗證指標是 NULL。

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

Hh694604.collapse_all(zh-tw,VS.110).gif不是 Null。

驗證指標不是 NULL。

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

Hh694604.collapse_all(zh-tw,VS.110).gif 為 True。

驗證條件為 true

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

Hh694604.collapse_all(zh-tw,VS.110).gif為 False。

驗證條件為 false

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

Hh694604.collapse_all(zh-tw,VS.110).gif失敗

強制測試案例結果失敗

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

Hh694604.collapse_all(zh-tw,VS.110).gif在執行階段判斷提示

Hh694604.collapse_all(zh-tw,VS.110).gif相等

驗證兩個 Windows 執行階段指標相等。

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

驗證兩個 Platform::String^字串相等。

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

Hh694604.collapse_all(zh-tw,VS.110).gif相同。

驗證兩個 Windows 執行階段參考相同的物件。

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

Hh694604.collapse_all(zh-tw,VS.110).gif不相等

驗證兩個 Windows 執行階段指標不相等。

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

驗證兩個 Platform::String^字串不相等。

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

Hh694604.collapse_all(zh-tw,VS.110).gif不相同。

驗證兩個 Windows 執行階段參考不會參考相同的物件。

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

Hh694604.collapse_all(zh-tw,VS.110).gif為 Null。

驗證 Windows 執行階段指標是 nullptr。

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

Hh694604.collapse_all(zh-tw,VS.110).gif不是 Null。

驗證 Windows 執行階段指標不是 nullptr。

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

Hh694604.collapse_all(zh-tw,VS.110).gif例外狀況判斷提示

Hh694604.collapse_all(zh-tw,VS.110).gif預期的例外狀況。

驗證引發例外狀況的函式:

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

驗證引發例外狀況的函式:

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

CppUnitTestLogger.h

Hh694604.collapse_all(zh-tw,VS.110).gif記錄器

記錄器類別包含靜態方法寫至。

class Logger

Hh694604.collapse_all(zh-tw,VS.110).gif寫入訊息

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

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

範例

這程式碼為一範例

////////////////////////////////////////////////////////////
/* USAGE EXAMPLE
// The following is an example of VSCppUnit usage.
// It includes examples of attribute metadata, fixtures,
// unit tests with assertions, and custom logging.

#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");
    }
};

請參閱

概念

使用單元測試驗證程式碼

使用測試總管針對機器碼執行單元測試

使用測試總管針對現有 C++ 應用程式執行單元測試