Использование пространства имен Microsoft.VisualStudio.TestTools.CppUnitTestFramework

В этом разделе перечислены открытые члены пространства имен Microsoft::VisualStudio::CppUnitTestFramework.

Файлы заголовков расположены в папке VisualStudio2012[x86]InstallFolder**\VC\UnitTest\include**.

Файлы библиотек расположены в папке VisualStudio2012[x86]InstallFolder**\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(ru-ru,VS.110).gifСоздание тестовых классов и методов

TEST_CLASS(className)

Необходимо, чтобы каждый класс содержал тестовые методы.Определите className как тестовый класс.TEST_CLASS должен быть объявлен в области пространства имен.

TEST_METHOD(methodName) 
{
    // test method body
}

Определите methodName в качестве тестового метода.TEST_METHOD необходимо объявить в области метода класса.

Hh694604.collapse_all(ru-ru,VS.110).gifИнициализация и очистка

Hh694604.collapse_all(ru-ru,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(ru-ru,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(ru-ru,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(ru-ru,VS.110).gifСоздание атрибутов тестов

Hh694604.collapse_all(ru-ru,VS.110).gifАтрибуты тестового метода

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

Добавьте атрибуты, указанные с одним или несколькими макросами TEST_METHOD_ATTRIBUTE в тестовый метод testClassName.

Макрос TEST_METHOD_ATTRIBUTE определяет атрибут с именем attributeName и значением attributeValue.

Hh694604.collapse_all(ru-ru,VS.110).gifАтрибуты тестового класса

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

Добавьте атрибуты, определенные с одним или несколькими макросами TEST_CLASS_ATTRIBUTE к тестовому классу testClassName.

Макрос TEST_CLASS_ATTRIBUTE определяет атрибут с именем attributeName и значением attributeValue.

Hh694604.collapse_all(ru-ru,VS.110).gifАтрибуты тестового модуля

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

Добавьте атрибуты, определенные с одним или несколькими макросами TEST_MODULE_ATTRIBUTE к модулю теста testModuleName.

Макрос TEST_MODULE_ATTRIBUTE определяет атрибут с именем attributeName и значением attributeValue.

Hh694604.collapse_all(ru-ru,VS.110).gifСтандартные атрибуты

Стандартные макросы атрибутов можно заменить макросами TEST_METHOD_ATTRIBUTE, TEST_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.

CppUnitTestAssert.h

Hh694604.collapse_all(ru-ru,VS.110).gifОбщие утверждения

Hh694604.collapse_all(ru-ru,VS.110).gifПроверка на равенство

Выполняет проверку, что два объекта равны

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

Выполняет проверку, что два объекта типа double равны

static void AreEqual(
    double expected, 
    double actual, 
    double tolerance, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

Выполняет проверку, что два объекта типа float равны

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(ru-ru,VS.110).gifПроверка на неравенство

Выполняет проверку, что два объекта типа double не равны

static void AreNotEqual(
    double notExpected, 
    double actual, 
    double tolerance, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

Выполняет проверку, что два объекта типа float не равны

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)

Hh694604.collapse_all(ru-ru,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(ru-ru,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(ru-ru,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(ru-ru,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(ru-ru,VS.110).gifУсловие имеет значение true.

Проверка, что условие имеет значение true

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

Hh694604.collapse_all(ru-ru,VS.110).gifУсловие имеет значение false.

Проверка, что условие имеет значение false

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

Hh694604.collapse_all(ru-ru,VS.110).gifНе пройден

Принудительно вернуть ошибку в тесте

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

Hh694604.collapse_all(ru-ru,VS.110).gifУтверждения среды выполнения Windows

Hh694604.collapse_all(ru-ru,VS.110).gifПроверка на эквивалентность

Проверка, что два указателя Windows Runtime равны.

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(ru-ru,VS.110).gifСсылаются на один и тот же объект

Проверка, что две ссылки Windows Runtime ссылаются на один и тот же объект.

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

Hh694604.collapse_all(ru-ru,VS.110).gifНе одинаковые

Проверка, что два указателя на Windows Runtime не одинаковы.

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(ru-ru,VS.110).gifНе ссылаются на один и тот же объект

Проверка, что указатели Windows Runtime не ссылаются на один и тот же объект.

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

Hh694604.collapse_all(ru-ru,VS.110).gifИмеет значение Null.

Проверка, что указатель Windows Runtime равен nullptr.

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

Hh694604.collapse_all(ru-ru,VS.110).gifНе имеет значение Null

Проверка, что указатели Windows Runtime не являются nullptr.

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

Hh694604.collapse_all(ru-ru,VS.110).gifУтверждения об исключениях

Hh694604.collapse_all(ru-ru,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(ru-ru,VS.110).gifВедение журнала

Класс ведения журнала содержит статические методы для записи

class Logger

Hh694604.collapse_all(ru-ru,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++ с использованием обозревателя тестов