使用 Microsoft.VisualStudio.TestTools.CppUnitTestFramework
本主题列出 Microsoft::VisualStudio::CppUnitTestFramework 命名空间的公共成员。
标头文件位于 VisualStudio2012 [] InstallFolder x86**\ VC \ UnitTest \ include** 文件夹。
LIB文件位于 VisualStudio2012 [] InstallFolder x86**\ VC \ UnitTest \ lib** 文件夹。
主题内容
CppUnitTest.h
Create test classes and methods
Initialize and cleanup
Test methods
Test classes
Test modules
Create test attributes
Test method attributes
Test class attributes
Test module attributes
Pre-defined attributes
CppUnitTestAssert.h
General Asserts
Are Equal
Are Not Equal
Are Same
Are Not Same
Is Null
Is Not Null
Is True
Is False
Fail
Windows Runtime Asserts
Are Equal
Are Same
Are Not Equal
Are Not Same
Is Null
Is Not Null
Exception Asserts
- Expect Exception
CppUnitTestLogger.h
Logger
Write Message
CppUnitTest.h
创建测试选件类和方法
TEST_CLASS(className)
会针对每选件类包含测试方法。 标识 className,测试选件类。 必须 声明TEST_CLASS 在namescape范围。
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 宏定义具有名称 可简单地 和值 attributeValue的特性。
测试选件类特性
BEGIN_TEST_CLASS_ATTRIBUTE(testClassName)
TEST_CLASS_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_CLASS_ATTRIBUTE()
添加属性定义与一个或多 TEST_CLASS_ATTRIBUTE 宏来测试选件类 testClassName。
TEST_CLASS_ATTRIBUTE 宏定义具有名称 可简单地 和值 attributeValue的特性。
测试模块特性
BEGIN_TEST_MODULE_ATTRIBUTE(testModuleName)
TEST_MODULE_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_MODULE_ATTRIBUTE()
添加属性定义与一个或多 TEST_MODULE_ATTRIBUTE 宏来测试模块 testModuleName。
TEST_MODULE_ATTRIBUTE 宏定义具有名称 可简单地 和值 attributeValue的特性。
预定义的属性
这些预定义的属性宏可以使用宏 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
泛型断言
相等
验证两个对象相等
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)
验证两个引用不是基于operator==的相等。
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)
Fail
强制测试用例结果失败
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)
CppUnitTestLogger.h
记录器
记录器选件类包含静态方法写入
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");
}
};