使用 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

Hh694604.collapse_all(zh-cn,VS.110).gif创建测试选件类和方法

TEST_CLASS(className)

会针对每选件类包含测试方法。 标识 className,测试选件类。 必须 声明TEST_CLASS 在namescape范围。

TEST_METHOD(methodName) 
{
    // test method body
}

定义 methodName 作为测试方法。 必须声明在方法的选件类的范围内,TEST_METHOD。

Hh694604.collapse_all(zh-cn,VS.110).gif初始化和清理

Hh694604.collapse_all(zh-cn,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-cn,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-cn,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-cn,VS.110).gif创建测试属性

Hh694604.collapse_all(zh-cn,VS.110).gif测试方案属性

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

添加属性定义与一个或多 TEST_METHOD_ATTRIBUTE 宏来测试方法 testClassName。

TEST_METHOD_ATTRIBUTE 宏定义具有名称 可简单地 和值 attributeValue的特性。

Hh694604.collapse_all(zh-cn,VS.110).gif测试选件类特性

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

添加属性定义与一个或多 TEST_CLASS_ATTRIBUTE 宏来测试选件类 testClassName。

TEST_CLASS_ATTRIBUTE 宏定义具有名称 可简单地 和值 attributeValue的特性。

Hh694604.collapse_all(zh-cn,VS.110).gif测试模块特性

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

添加属性定义与一个或多 TEST_MODULE_ATTRIBUTE 宏来测试模块 testModuleName。

TEST_MODULE_ATTRIBUTE 宏定义具有名称 可简单地 和值 attributeValue的特性。

Hh694604.collapse_all(zh-cn,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-cn,VS.110).gif泛型断言

Hh694604.collapse_all(zh-cn,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-cn,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)

验证两个引用不是基于operator==的相等。

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-cn,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-cn,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-cn,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-cn,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-cn,VS.110).gif是True

验证条件为true

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

Hh694604.collapse_all(zh-cn,VS.110).gif为False

验证条件为false

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

Hh694604.collapse_all(zh-cn,VS.110).gifFail

强制测试用例结果失败

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

Hh694604.collapse_all(zh-cn,VS.110).gifWindows运行时断言

Hh694604.collapse_all(zh-cn,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-cn,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-cn,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-cn,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-cn,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-cn,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-cn,VS.110).gif异常断言

Hh694604.collapse_all(zh-cn,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-cn,VS.110).gif记录器

记录器选件类包含静态方法写入

class Logger

Hh694604.collapse_all(zh-cn,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++ 应用程序进行单元测试