Использование пространства имен 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++ с использованием обозревателя тестов
Другие ресурсы
Модульное тестирование машинного кода с использованием обозревателя тестов