Referenční informace k rozhraní MICROSOFT.VisualStudio.TestTools.CppUnitTestFramework API
Toto téma obsahuje seznam veřejných členů oboru Microsoft::VisualStudio::CppUnitTestFramework názvů. Pomocí těchto rozhraní API můžete psát testy jednotek C++ založené na rozhraní Microsoft Native Unit Test Framework. Na konci tématu je příklad použití.
Hlavičky a soubory knihovny jsou umístěné ve složce <Visual Studio installation folder> \VC\Auxiliary\VS\UnitTest.
Cesty hlaviček a knihovny se automaticky konfigurují v projektu nativního testu.
V tomto tématu
CppUnitTest.h
Vytvoření testovacích tříd a metod
TEST_CLASS(className)
Vyžaduje se pro každou třídu obsahující testovací metody. Identifikuje className jako testovací třídu. TEST_CLASS musí být deklarována v oboru názvů.
TEST_METHOD(methodName)
{
// test method body
}
Definuje methodName jako testovací metodu. TEST_METHOD musí být deklarována v oboru třídy metody.
Inicializace a vyčištění
Testovací metody
TEST_METHOD_INITIALIZE(methodName)
{
// method initialization code
}
Definuje methodName jako metodu, která se spustí před spuštěním každé testovací metody. TEST_METHOD_INITIALIZE lze definovat pouze jednou ve třídě testu a musí být definována v oboru testovací třídy.
TEST_METHOD_CLEANUP(methodName)
{
// test method cleanup code
}
Definuje methodName jako metodu, která se spustí po spuštění každé testovací metody. TEST_METHOD_CLEANUP lze definovat pouze jednou ve třídě testu a musí být definována v oboru testovací třídy.
Testovací třídy
TEST_CLASS_INITIALIZE(methodName)
{
// test class initialization code
}
Definuje methodName jako metodu, která se spouští před vytvořením každé testovací třídy. TEST_CLASS_INITIALIZE lze definovat pouze jednou ve třídě testu a musí být definována v oboru testovací třídy.
TEST_CLASS_CLEANUP(methodName)
{
// test class cleanup code
}
Definuje methodName jako metodu, která se spustí po vytvoření každé testovací třídy. TEST_CLASS_CLEANUP lze definovat pouze jednou ve třídě testu a musí být definována v oboru testovací třídy.
Testovací moduly
TEST_MODULE_INITIALIZE(methodName)
{
// module initialization code
}
Definuje metodu methodName, která se spustí při načtení modulu. TEST_MODULE_INITIALIZE lze definovat pouze jednou v testovacím modulu a musí být deklarována v oboru názvů.
TEST_MODULE_CLEANUP(methodName)
Definuje metodu methodName, která se spustí při uvolnění modulu. TEST_MODULE_CLEANUP lze definovat pouze jednou v testovacím modulu a musí být deklarována v oboru názvů.
Vytvoření atributů testu
Atributy testovací metody
BEGIN_TEST_METHOD_ATTRIBUTE(testMethodName)
TEST_METHOD_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_METHOD_ATTRIBUTE()
Přidá atributy definované pomocí jednoho nebo více maker do TEST_METHOD_ATTRIBUTE testovací metody testMethodName.
Makro TEST_METHOD_ATTRIBUTE definuje atribut s názvem attributeName a hodnotou attributeValue.
Testování atributů třídy
BEGIN_TEST_CLASS_ATTRIBUTE(testClassName)
TEST_CLASS_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_CLASS_ATTRIBUTE()
Přidá atributy definované pomocí jednoho nebo více maker TEST_CLASS_ATTRIBUTE do testovací třídy testClassName.
Makro TEST_CLASS_ATTRIBUTE definuje atribut s názvem attributeName a hodnotou attributeValue.
Testování atributů modulu
BEGIN_TEST_MODULE_ATTRIBUTE(testModuleName)
TEST_MODULE_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_MODULE_ATTRIBUTE()
Přidá atributy definované pomocí jednoho nebo více maker TEST_MODULE_ATTRIBUTE do testovacího modulu testModuleName.
Makro TEST_MODULE_ATTRIBUTE definuje atribut s názvem attributeName a hodnotou attributeValue.
Předdefinované atributy
Tato předdefinované makra atributů jsou k dispozici jako pohodlí pro běžné případy. Mohou být nahrazeny makru TEST_METHOD_ATTRIBUTE popsaným výše.
TEST_OWNER(ownerAlias)
Definuje s názvem a TEST_METHOD_ATTRIBUTE Owner hodnotou atributu ownerAlias.
TEST_DESCRIPTION(description)
Definuje s názvem a TEST_METHOD_ATTRIBUTE Description hodnotou atributu description.
TEST_PRIORITY(priority)
Definuje s názvem a TEST_METHOD_ATTRIBUTE Priority atributem hodnotu priority.
TEST_WORKITEM(workitem)
Definuje s názvem a TEST_METHOD_ATTRIBUTE WorkItem hodnotou atributu workItem.
TEST_IGNORE()
Definuje s názvem a TEST_METHOD_ATTRIBUTE Ignore hodnotou atributu true .
CppUnitTestAssert.h
Obecné kontrolní výrazy
Jsou si rovny
Ověření, že jsou dva objekty stejné
template<typename T>
static void Assert::AreEqual(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ověřte, že jsou dvě dvojité dvojité rovny.
static void Assert::AreEqual(
double expected,
double actual,
double tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ověřte, že jsou si dvě plovoucí desetinná čárka rovna.
static void Assert::AreEqual(
float expected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ověřte, že jsou si dva řetězce char* rovny.
static void Assert::AreEqual(
const char* expected,
const char* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ověřte, že jsou w_char* dva řetězce
static void Assert::AreEqual(
const wchar_t* expected,
const wchar_t* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Nejsou si rovny
Ověřte, že se dvě dvojité typy nerovnají.
static void Assert::AreNotEqual(
double notExpected,
double actual,
double tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ověřte, že se dvě plovoucí desetinná čárka nerovnají.
static void Assert::AreNotEqual(
float notExpected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ověřte, že se dva řetězce char* nerovnají.
static void Assert::AreNotEqual(
const char* notExpected,
const char* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ověřte, že w_char* nejsou rovny dvěma řetězci.
static void Assert::AreNotEqual(
const wchar_t* notExpected,
const wchar_t* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ověřte, že se dva odkazy nerovnají na základě operátoru operator==.
template<typename T>
static void Assert::AreNotEqual(
const T& notExpected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Jsou stejné
Ověřte, že dva odkazy odkazují na stejnou instanci objektu (identitu).
template<typename T>
static void Assert::AreSame(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Nejsou stejné
Ověřte, že dva odkazy odkazují na stejnou instanci objektu (identitu).
template<typename T>
static void Assert::AreNotSame (
const T& notExpected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Má hodnotu Null.
Ověřte, že má ukazatel hodnotu NULL.
template<typename T>
static void Assert::IsNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Není null
Ověření, že ukazatel není NULL
template<typename T>
static void Assert::IsNotNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Je true
Ověření, jestli je podmínka pravdivá
static void Assert::IsTrue(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Je nepravda
Ověření, že podmínka je false
static void Assert::IsFalse(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Selhání
Vynucení selhání výsledku testovacího případu
static void Assert::Fail(
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Windows Kontrolní výrazy modulu runtime
Jsou si rovny
Ověří, že dva Windows runtime jsou si rovny.
template<typename T>
static void Assert::AreEqual(
T^ expected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Ověří, že dva řetězce Platform::String^ jsou si rovny.
template<typename T>
static void Assert::AreEqual(
T^ expected,
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Jsou stejné
Ověří, že dva Windows Runtime odkazují na stejný objekt.
template<typename T>
static void Assert::AreSame(
T% expected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Nejsou si rovny
Ověří, že dva Windows runtime nejsou rovny.
template<typename T>
static void Assert::AreNotEqual(
T^ notExpected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Ověří, že dva řetězce Platform::String^ nejsou si rovny.
static void Assert::AreNotEqual(
Platform::String^ notExpected,
Platform::String^ actual,
bool ignoreCase = false,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Nejsou stejné
Ověří, že dva Windows Runtime odkazují na stejný objekt.
template<typename T>
static void Assert::AreNotSame(
T% notExpected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Má hodnotu Null.
Ověří, že ukazatel Windows Runtime je nullptr.
template<typename T>
static void Assert::IsNull(
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Není null
Ověří, že ukazatel Windows Runtime není nullptr.
template<typename T>
static void Assert::IsNotNull(
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Kontrolní výrazy výjimek
Očekávat výjimku
Ověřte, že funkce vyvolá výjimku:
template<typename _EXPECTEDEXCEPTION, typename _FUNCTOR>
static void Assert::ExpectException(
_FUNCTOR functor,
const wchar_t* message= NULL,
const __LineInfo* pLineInfo= NULL)
Ověřte, že funkce vyvolá výjimku:
template<typename _EXPECTEDEXCEPTION, typename _RETURNTYPE>
static void Assert::ExpectException(
_RETURNTYPE (*func)(),
const wchar_t* message= NULL,
const __LineInfo* pLineInfo = NULL)
CppUnitTestLogger.h
Logger
Třída Logger obsahuje statické metody pro zápis do okno Výstup.
Zápis zprávy
Zápis řetězce do okno Výstup
static void Logger::WriteMessage(const wchar_t* message)
static void Logger::WriteMessage(const char* message)
Příklad
Tento kód je příkladem použití VSCppUnit. Obsahuje příklady metadat atributů, náchytů, testů jednotek s kontrolními výrazy a vlastního protokolování.
// 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");
}
};