Referenční informace k rozhraní API Microsoft.VisualStudio.TestTools.CppUnitTestFramework
Toto téma obsahuje seznam veřejných členů Microsoft::VisualStudio::CppUnitTestFramework
oboru názvů. Tato rozhraní API slouží k zápisu testů jednotek jazyka C++ na základě architektury Microsoft Native Unit Test Framework. Na konci tématu je příklad použití.
Soubory hlaviček a knihovny se nacházejí v instalační <složce> sady Visual Studio\VC\Auxiliary\VS\UnitTest.
Cesty hlaviček a knihovny se automaticky konfigurují v nativním testovacím projektu.
V tomto tématu
CppUnitTest.h
Vytvoření testovacích tříd a metod
TEST_CLASS(className)
Požadováno pro každou třídu obsahující testovací metody. Identifikuje className jako testovací třídu. TEST_CLASS
musí být deklarován v oboru názvů.
TEST_METHOD(methodName)
{
// test method body
}
Definuje methodName jako testovací metodu. TEST_METHOD
musí být deklarován 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 spouští před spuštěním každé testovací metody. TEST_METHOD_INITIALIZE
lze definovat pouze jednou v testovací třídě a musí být definován v oboru testovací třídy.
TEST_METHOD_CLEANUP(methodName)
{
// test method cleanup code
}
Definuje methodName jako metodu, která se spustí po každém spuštění testovací metody. TEST_METHOD_CLEANUP
lze definovat pouze jednou v testovací třídě a musí být definován 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 v testovací třídě a musí být definován v oboru testovací třídy.
TEST_CLASS_CLEANUP(methodName)
{
// test class cleanup code
}
Definuje methodName jako metodu, která se spouští po vytvoření každé testovací třídy. TEST_CLASS_CLEANUP
lze definovat pouze jednou v testovací třídě a musí být definován 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án 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án v oboru názvů.
Vytvoření testovacích atributů
Atributy testovací metody
BEGIN_TEST_METHOD_ATTRIBUTE(testMethodName)
TEST_METHOD_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_METHOD_ATTRIBUTE()
Přidá atributy definované jedním nebo více TEST_METHOD_ATTRIBUTE
makry do testovací metody testMethodName.
Makro TEST_METHOD_ATTRIBUTE
definuje atribut s name attributeName a value attributeValue.
Testovat atributy třídy
BEGIN_TEST_CLASS_ATTRIBUTE(testClassName)
TEST_CLASS_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_CLASS_ATTRIBUTE()
Přidá atributy definované jedním nebo více TEST_CLASS_ATTRIBUTE
makry do třídy testClassName.
Makro TEST_CLASS_ATTRIBUTE
definuje atribut s name attributeName a value attributeValue.
Atributy testovacího modulu
BEGIN_TEST_MODULE_ATTRIBUTE(testModuleName)
TEST_MODULE_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_MODULE_ATTRIBUTE()
Přidá atributy definované jedním nebo více TEST_MODULE_ATTRIBUTE
makry do testovacího modulu testModuleName.
Makro TEST_MODULE_ATTRIBUTE
definuje atribut s name attributeName a value attributeValue.
Předdefinované atributy
Tato předdefinovaná makra atributů jsou poskytována jako pohodlí pro běžné případy. Dají se nahradit výše popsaným makrem TEST_METHOD_ATTRIBUTE
.
TEST_OWNER(ownerAlias)
TEST_METHOD_ATTRIBUTE
Definuje s názvem Owner
a hodnotou atributu ownerAlias.
TEST_DESCRIPTION(description)
TEST_METHOD_ATTRIBUTE
Definuje název Description
a hodnotu atributu popisu.
TEST_PRIORITY(priority)
TEST_METHOD_ATTRIBUTE
Definuje s názvem Priority
a hodnotou atributu priority.
TEST_WORKITEM(workitem)
TEST_METHOD_ATTRIBUTE
Definuje s názvem WorkItem
a hodnotou atributu workItem.
TEST_IGNORE()
TEST_METHOD_ATTRIBUTE
Definuje s názvem Ignore
a hodnotou atributu true
.
CppUnitTestAssert.h
Obecné kontrolní výrazy
Jsou stejné
Ověřte, ž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é rovny.
static void Assert::AreEqual(
double expected,
double actual,
double tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ověřte, že jsou dvě plovoucí hodnoty rovny.
static void Assert::AreEqual(
float expected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ověřte, že jsou dva řetězce typu char* stejné.
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 dva řetězce w_char* stejné.
static void Assert::AreEqual(
const wchar_t* expected,
const wchar_t* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Nerovná se
Ověřte, že se dvě dvojité sady 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í hodnoty nerovnají.
static void Assert::AreNotEqual(
float notExpected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Ověřte, že dva řetězce typu char* nejsou stejné.
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 se dva řetězce w_char* nerovnají.
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==.
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 neodkazují 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)
Je null
Ověřte, že je ukazatel null.
template<typename T>
static void Assert::IsNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Is Not Null
Ověřte, že ukazatel nemá hodnotu NULL.
template<typename T>
static void Assert::IsNotNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Je true
Ověření, že je podmínka pravdivá
static void Assert::IsTrue(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Je false
Ověření, že je podmínka nepravda
static void Assert::IsFalse(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Chyba
Vynutit selhání výsledku testovacího případu
static void Assert::Fail(
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
kontrolní výrazy prostředí Windows Runtime
Jsou stejné
Ověřuje, že jsou dva prostředí Windows Runtime ukazatele stejné.
template<typename T>
static void Assert::AreEqual(
T^ expected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Ověřuje, že jsou dva řetězce Platform::String^ stejné.
template<typename T>
static void Assert::AreEqual(
T^ expected,
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Jsou stejné
Ověří, že dva prostředí 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)
Nerovná se
Ověřuje, že dva prostředí Windows Runtime ukazatele nejsou stejné.
template<typename T>
static void Assert::AreNotEqual(
T^ notExpected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Ověřuje, že se dva řetězce Platform::String^ nerovnají.
static void Assert::AreNotEqual(
Platform::String^ notExpected,
Platform::String^ actual,
bool ignoreCase = false,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Nejsou stejné
Ověřuje, že dva prostředí Windows Runtime odkazy neodkazují na stejný objekt.
template<typename T>
static void Assert::AreNotSame(
T% notExpected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Je null
Ověřuje, že ukazatel prostředí Windows Runtime je nullptr.
template<typename T>
static void Assert::IsNull(
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Is Not Null
Ověřuje, že ukazatel prostředí 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ávejte 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 výstupního okna.
Napsat zprávu
Zápis řetězce do okna 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ů, příslušenství, testování jednotek s kontrolními výrazy a vlastní 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");
}
};