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


Справочник по API Microsoft.VisualStudio.TestTools.CppUnitTestFramework

В этом разделе перечислены открытые члены пространства имен Microsoft::VisualStudio::CppUnitTestFramework. С помощью этих интерфейсов API можно создавать модульные тесты для C++ на основе собственной платформы модульного тестирования Майкрософт. В конце раздела приводится пример использования.

Файлы заголовков и библиотек находятся по пути <папка установки Visual Studio>\VC\Auxiliary\VS\UnitTest.

Пути к заголовкам и библиотекам автоматически настраиваются в собственном тестовом проекте.

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

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

Определяет TEST_METHOD_ATTRIBUTE с именем Owner и значение атрибута для ownerAlias.

TEST_DESCRIPTION(description)

Определяет TEST_METHOD_ATTRIBUTE с именем Description и значение атрибута для description.

TEST_PRIORITY(priority)

Определяет TEST_METHOD_ATTRIBUTE с именем Priority и значение атрибута для priority.

TEST_WORKITEM(workitem)

Определяет TEST_METHOD_ATTRIBUTE с именем WorkItem и значение атрибута для workItem.

TEST_IGNORE()

Определяет TEST_METHOD_ATTRIBUTE с именем Ignore и значение атрибута для true.

CppUnitTestAssert.h

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

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

Проверяет, равны ли два объекта.

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

Проверяет, равны ли два объекта типа double.

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

Проверяет, равны ли два объекта типа float.

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)

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

Проверяет неравенство двух объектов типа double.

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

Проверяет неравенство двух объектов типа float.

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

Проверяет, имеет ли условие значение alse.

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

См. также