Использование пространства имен 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
Создание тестовых классов и методов
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 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)
Ссылаются на один и тот же объект
Проверка, что две ссылки Windows Runtime ссылаются на один и тот же объект.
template<typename T>
static void AreSame(
T% expected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Не одинаковые
Проверка, что два указателя на 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)
Не ссылаются на один и тот же объект
Проверка, что указатели Windows Runtime не ссылаются на один и тот же объект.
template<typename T>
static void AreNotSame(
T% notExpected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Имеет значение Null.
Проверка, что указатель Windows Runtime равен nullptr.
template<typename T>
static void IsNull(
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Не имеет значение Null
Проверка, что указатели Windows Runtime не являются 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++ с использованием обозревателя тестов