使用 Microsoft.VisualStudio.TestTools.CppUnitTestFramework

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

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

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

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

CppUnitTest.h

建立測試類別和方法

TEST_CLASS(className)  

要求包含測試方法的每一個類別。 識別 className 為測試類別。 必須在 namescape 範圍宣告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  
}  

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

TEST_MODULE_CLEANUP(methodName)  

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

建立測試屬性

測試方法屬性

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

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

TEST_METHOD_ATTRIBUTE 巨集定義名為 attributeNameattributeValue值的一個屬性。

測試類別屬性

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

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

TEST_CLASS_ATTRIBUTE 巨集定義名為 attributeNameattributeValue值的一個屬性。

測試模組屬性

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

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

TEST_MODULE_ATTRIBUTE 巨集定義名為 attributeNameattributeValue值的一個屬性。

預先定義的屬性。

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

TEST_OWNER(ownerAlias)  

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

TEST_DESCRIPTION(description)  

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

TEST_PRIORITY(priority)  

定義使用名稱 Priority 且屬性值為 priority的屬性。

TEST_WORKITEM(workitem)  

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

TEST_IGNORE()  

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

一般判斷提示

相等

驗證兩個物件相等

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)  

不相等

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

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)  

相同。

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

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

不相同。

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

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

為 Null。

驗證指標是 NULL。

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

不是 Null。

驗證指標不是 NULL。

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

為 True。

驗證條件為 true

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

為 False。

驗證條件為 false

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

失敗

強制測試案例結果失敗

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

Windows 執行階段判斷提示

相等

驗證兩個 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)  

相同。

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

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

不相等

驗證兩個 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)  

不相同。

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

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

為 Null。

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

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

不是 Null。

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

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

例外狀況判斷提示

預期的例外狀況。

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

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)  

記錄器

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

class Logger  

寫入訊息

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

對程式碼進行單元測試
Unit testing native code with Test Explorer
將單元測試加入至現有的 C++ 應用程式

顯示: