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

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");
    }
};

Viz také