Microsoft.VisualStudio.TestTools.CppUnitTestFramework の使用

このトピックでは Microsoft::VisualStudio::CppUnitTestFramework の名前空間のパブリック メンバーを示します。

ヘッダー ファイルは x86 VisualStudio2012 [入力] InstallFolder**\VC\UnitTest\include** フォルダーにあります。

LIB のファイルは x86 VisualStudio2012 [入力] 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

Hh694604.collapse_all(ja-jp,VS.110).gifテスト クラスとメソッドを作成します。

TEST_CLASS(className)

テスト メソッドを含むクラスごとに必要です。テスト クラスとして className を識別します。TEST_CLASS は namescape のスコープで宣言する必要があります。

TEST_METHOD(methodName) 
{
    // test method body
}

テスト メソッドと methodName を定義します。TEST_METHOD は、メソッドのクラスのスコープ内で宣言する必要があります。

Hh694604.collapse_all(ja-jp,VS.110).gif初期化およびクリーンアップ

Hh694604.collapse_all(ja-jp,VS.110).gifテスト メソッド

TEST_METHOD_INITIALIZE(methodName) 
{
    // method initialization code
}

各テスト メソッドの実装を実行するメソッドと methodName を定義します。TEST_METHOD_INITIALIZE は、テスト クラスに一度だけ定義できます。また、テスト クラスで定義する必要があります。

TEST_METHOD_CLEANUP(methodName) 
{
    // test method cleanup  code
}

各テスト メソッドの後の実行を実行するメソッドと methodName を定義します。TEST_METHOD_CLEANUP は、テスト クラスに一度だけ定義できます。また、テスト クラスのスコープ内で定義する必要があります。

Hh694604.collapse_all(ja-jp,VS.110).gifテスト クラス

TEST_CLASS_INITIALIZE(methodName) 
{
    // test class initialization  code
}

各テスト クラスの後の実行が作成されると methodName メソッドを定義します。TEST_CLASS_INITIALIZE は、テスト クラスに一度だけ定義できます。また、テスト クラスのスコープ内で定義する必要があります。

TEST_CLASS_CLEANUP(methodName) 
{
    // test class cleanup  code
}

各テスト クラスの後の実行が作成されると methodName メソッドを定義します。TEST_CLASS_CLEANUP は、テスト クラスに一度だけ定義できます。また、テスト クラスのスコープ内で定義する必要があります。

Hh694604.collapse_all(ja-jp,VS.110).gifテストのモジュール

TEST_MODULE_INITIALIZE(methodName)
{
    // module initialization code
}

モジュールが読み込まれるときに実行 methodName メソッドを定義します。TEST_MODULE_INITIALIZE は、テストのモジュールに一度だけ定義できます。また、名前空間スコープで宣言する必要があります。

TEST_MODULE_CLEANUP(methodName)

モジュールがアンロードされるときに実行されるメソッド methodName を定義します。TEST_MODULE_CLEANUP は、テストのモジュールに一度だけ定義できます。また、名前空間スコープで宣言する必要があります。

Hh694604.collapse_all(ja-jp,VS.110).gifテストの属性を作成します。

Hh694604.collapse_all(ja-jp,VS.110).gifテスト メソッドの属性

BEGIN_TEST_METHOD_ATTRIBUTE(testMethodName) 
    TEST_METHOD_ATTRIBUTE(attributeName, attributeValue)
    ...
END_TEST_METHOD_ATTRIBUTE()

TEST_METHOD_ATTRIBUTE の一つ以上のマクロに定義されたテスト メソッド testClassNameに属性を追加します。

TEST_METHOD_ATTRIBUTE のマクロは attributeName 名前と値 attributeValueを使用してこの属性を定義します。

Hh694604.collapse_all(ja-jp,VS.110).gifテスト クラスの属性

BEGIN_TEST_CLASS_ATTRIBUTE(testClassName) 
    TEST_CLASS_ATTRIBUTE(attributeName, attributeValue)
    ...
END_TEST_CLASS_ATTRIBUTE()

TEST_CLASS_ATTRIBUTE の一つ以上のマクロに定義されているテスト testClassNameクラスに属性を追加します。

TEST_CLASS_ATTRIBUTE のマクロは attributeName 名前と値 attributeValueを使用してこの属性を定義します。

Hh694604.collapse_all(ja-jp,VS.110).gifテストの属性

BEGIN_TEST_MODULE_ATTRIBUTE(testModuleName) 
    TEST_MODULE_ATTRIBUTE(attributeName, attributeValue)
    ...
END_TEST_MODULE_ATTRIBUTE()

TEST_MODULE_ATTRIBUTE の一つ以上のマクロに定義されたテストの testModuleNameモジュールに属性を追加します。

TEST_MODULE_ATTRIBUTE のマクロは attributeName 名前と値 attributeValueを使用してこの属性を定義します。

Hh694604.collapse_all(ja-jp,VS.110).gif定義済みの属性

これらの定義済み属性マクロは、前に説明したマクロ TEST_METHOD_ATTRIBUTE、TEST_CLASS_ATTRIBUTE、または TEST_MODULE_ATTRIBUTE の代わりに使用できます。

TEST_OWNER(ownerAlias)

名前 Owner と ownerAliasの属性値を持つ属性を定義します。

TEST_DESCRIPTION(description)

名前 Description と ついての属性値を持つ属性を定義します。

TEST_PRIORITY(priority)

名前 Priority と 優先順位の属性値を持つ属性を定義します。

TEST_WORKITEM(workitem)

名前 WorkItem と workItemの属性値を持つ属性を定義します。

TEST_IGNORE()

名前 Ignore と trueの属性値を持つ属性を定義します。

CppUnitTestAssert.h

Hh694604.collapse_all(ja-jp,VS.110).gif一般の Assert

Hh694604.collapse_all(ja-jp,VS.110).gif等しい場合は。

2 種類のオブジェクトが等しいことを確認します。

template<typename T> 
static void AreEqual(
    const T& expected, 
    const T& actual, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

2 個の倍精度浮動小数点数が等しいことを確認します。

static void AreEqual(
    double expected, 
    double actual, 
    double tolerance, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

2 個の浮動が等しいことを確認します。

static void AreEqual(
    float expected, 
    float actual, 
    float tolerance, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

2 個の char* の文字列が等しいことを確認します。

static void AreEqual(
    const char* expected, 
    const char* actual, 
    bool ignoreCase = false, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

2 個の 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)

Hh694604.collapse_all(ja-jp,VS.110).gif等しくない場合は。

2 個の倍精度浮動小数点数が等しくないことを確認します。

static void AreNotEqual(
    double notExpected, 
    double actual, 
    double tolerance, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

2 個の浮動が等しくないことを確認します。

static void AreNotEqual(
    float notExpected, 
    float actual, 
    float tolerance, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

2 個の char* の文字列が等しくないことを確認します。

static void AreNotEqual(
    const char* notExpected, 
    const char* actual, 
    bool ignoreCase = false, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

2 個の 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)

operator== に基づく 2 個の参照が等しくないことを確認します。

template<typename T> 
static void AreNotEqual(
    const T& notExpected, 
    const T& actual, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

Hh694604.collapse_all(ja-jp,VS.110).gif同じです

2 種類の参照が同じオブジェクト インスタンス (ID) を示すことを確認します。

template<typename T> 
static void AreSame(
    const T& expected, 
    const T& actual, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

Hh694604.collapse_all(ja-jp,VS.110).gif同じではありません。

2 種類の参照が同じオブジェクト インスタンス (ID) を参照しないことを確認します。

template<typename T> 
static void AreNotSame (
    const T& notExpected, 
    const T& actual, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

Hh694604.collapse_all(ja-jp,VS.110).gifnull です

ポインターが null であることを確認します。

template<typename T> 
static void IsNull(
    const T* actual,
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

Hh694604.collapse_all(ja-jp,VS.110).gifnull ではありません。

ポインターが null でないことを確認します。

template<typename T> 
static void IsNotNull(
    const T* actual, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

Hh694604.collapse_all(ja-jp,VS.110).gif当てはまります。

条件が True であることを確認します。

static void IsTrue(
    bool condition, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

Hh694604.collapse_all(ja-jp,VS.110).giffalse です

条件が false であることを確認します。

static void IsFalse(
    bool condition, 
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

Hh694604.collapse_all(ja-jp,VS.110).gif失敗

テスト ケースの結果が失敗するように強制します。

static void Fail(
    const wchar_t* message = NULL, 
    const __LineInfo* pLineInfo = NULL)

Hh694604.collapse_all(ja-jp,VS.110).gifWindows のランタイムの Assert

Hh694604.collapse_all(ja-jp,VS.110).gif等しい場合は。

Windows の 2 種類のランタイムのポインターが等しいことを確認します。

template<typename T> 
static void AreEqual(
    T^ expected, 
    T^ actual, 
    Platform::String^ message = nullptr, 
    const __LineInfo* pLineInfo= nullptr)

Platform::String^ の 2 文字列が等しいことを確認します。

template<typename T> 
static void AreEqual(
    T^ expected, 
    T^ actual, 
    Platform::String^ message= nullptr, 
    const __LineInfo* pLineInfo= nullptr)

Hh694604.collapse_all(ja-jp,VS.110).gif同じです

Windows の 2 回の実行時参照が同じオブジェクトを参照することを示すことを確認します。

template<typename T> 
static void AreSame(
    T% expected, 
    T% actual, 
    Platform::String^ message= nullptr, 
    const __LineInfo* pLineInfo= nullptr)

Hh694604.collapse_all(ja-jp,VS.110).gif等しくない場合は。

Windows の 2 種類のランタイムのポインターが等しくないことを確認します。

template<typename T> 
static void AreNotEqual(
    T^ notExpected, 
    T^ actual, 
    Platform::String^ message = nullptr, 
    const __LineInfo* pLineInfo= nullptr)

Platform::String^ の 2 文字列が等しくないことを確認します。

static void AreNotEqual(
    Platform::String^ notExpected, 
    Platform::String^ actual, 
    bool ignoreCase = false, 
    Platform::String^ message= nullptr, 
    const __LineInfo* pLineInfo= nullptr)

Hh694604.collapse_all(ja-jp,VS.110).gif同じではありません。

Windows の 2 回の実行時参照が同じオブジェクトを参照していないことを確認します。

template<typename T> 
static void AreNotSame(
    T% notExpected, 
    T% actual, 
    Platform::String^ message= nullptr, 
    const __LineInfo* pLineInfo= nullptr)

Hh694604.collapse_all(ja-jp,VS.110).gifnull です

Windows のランタイムのポインターが nullptr であることを確認します。

template<typename T> 
static void IsNull(
    T^ actual,
    Platform::String^ message = nullptr, 
    const __LineInfo* pLineInfo= nullptr)

Hh694604.collapse_all(ja-jp,VS.110).gifnull ではありません。

Windows のランタイムのポインターが nullptr でないことを確認します。

template<typename T> 
static void IsNotNull(
    T^ actual, 
    Platform::String^ message= nullptr, 
    const __LineInfo* pLineInfo= nullptr)

Hh694604.collapse_all(ja-jp,VS.110).gif例外の Assert

Hh694604.collapse_all(ja-jp,VS.110).gif例外を要求します。

関数が例外を発生させてください:

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

Hh694604.collapse_all(ja-jp,VS.110).gifロガー

logger クラスに書き込むには、静的メソッドが含まれています

class Logger

Hh694604.collapse_all(ja-jp,VS.110).gifメッセージの書き込み

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++ アプリケーションの単体テスト