Microsoft.VisualStudio.TestTools.CppUnitTestFramework API 參考
本主題列出 Microsoft::VisualStudio::CppUnitTestFramework
命名空間的公用成員。 您可以使用這些 API 來撰寫以 Microsoft 原生單元測試架構為基礎的 C++ 單元測試。 本主題結尾有使用範例。
標頭和 lib 檔案位於 <Visual Studio 安裝資料夾>\VC\Auxiliary\VS\UnitTest 底下。
標頭和 lib 路徑會自動在原生測試專案中設定。
本主題內容
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
}
定義載入模組時要執行的方法 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
巨集定義的屬性加入至測試方法 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)
以名稱 Owner
和 ownerAlias 的屬性值定義 TEST_METHOD_ATTRIBUTE
。
TEST_DESCRIPTION(description)
以名稱 Description
和 description 的屬性值定義 TEST_METHOD_ATTRIBUTE
。
TEST_PRIORITY(priority)
以名稱 Priority
和 priority 的屬性值定義 TEST_METHOD_ATTRIBUTE
。
TEST_WORKITEM(workitem)
以名稱 WorkItem
和 workItem 的屬性值定義 TEST_METHOD_ATTRIBUTE
。
TEST_IGNORE()
以名稱 Ignore
和 true
的屬性值定義 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");
}
};