Поделиться через


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

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

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

Файлы библиотек расположены в папке VisualStudio2012[x86]InstallFolder**\VC\UnitTest\lib**.

В этом разделе

CppUnitTest.h

  • Создание тестовых классов и методов

  • Инициализация и очистка

    • Тестовый методы

    • Тестовые классы

    • Модули тестов

  • Создание атрибутов тестов

    • Атрибуты тестового метода

    • Атрибуты тестового класса

    • Атрибуты тестового модуля

    • Стандартные атрибуты

    CppUnitTestAssert.h

    • Общие утверждения

      • Проверка на равенство

      • Проверка на неравенство

      • Ссылаются на один и тот же объект

      • Не ссылаются на один и тот же объект

      • Имеет значение Null.

      • Имеет значение не Null.

      • Условие имеет значение true.

      • Условие имеет значение false.

      • Не пройден

    • Утверждения среды выполнения Windows

      • Проверка на равенство

      • Ссылаются на один и тот же объект

      • Проверка на неравенство

      • Не ссылаются на один и тот же объект

      • Имеет значение Null.

      • Имеет значение не Null.

    • Утверждения об исключениях

      • Ожидается исключение

      CppUnitTestLogger.h

      • Ведение журнала

      • Запись сообщения

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, в тестовый метод testClassName.

Макрос 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_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

Общие утверждения

Проверка на равенство

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

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)

Проверка на неравенство

Выполняет проверку, что два объекта типа 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)

Ссылаются на один и тот же объект

Проверка, что две ссылки ссылаются на один и тот же экземпляр объекта (идентификатор).

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)

Не пройден

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

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");
    }
};

См. также

Основные понятия

Проверка кода при помощи модульных тестов

Модульное тестирование существующих приложений C++ с использованием обозревателя тестов

Другие ресурсы

Модульное тестирование машинного кода с использованием обозревателя тестов