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
记录器
Logger 类包含要写入到输出窗口 的静态方法。
编写消息
将字符串写入到输出窗口
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");
}
};