Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе перечислены открытые члены пространства имен Microsoft::VisualStudio::CppUnitTestFramework
. С помощью этих интерфейсов API можно создавать модульные тесты для C++ на основе собственной платформы модульного тестирования Майкрософт. В конце раздела приводится пример использования.
Файлы заголовков и библиотек находятся по пути <папка установки Visual Studio>\VC\Auxiliary\VS\UnitTest.
Пути к заголовкам и библиотекам автоматически настраиваются в собственном тестовом проекте.
В этом разделе
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");
}
};