Microsoft.VisualStudio.TestTools.CppUnitTestFramework API リファレンス
このトピックでは Microsoft::VisualStudio::CppUnitTestFramework
の名前空間のパブリック メンバーの一覧を示します。 Microsoft ネイティブ単体テスト フレームワークに基づいて C++ の単体テストを作成するには、これらの API を使います。 トピックの最後には「使用例」があります。
ヘッダーと lib のファイルは <Visual Studio インストール フォルダー>\VC\Auxiliary\VS\UnitTest にあります。
ヘッダーと lib のパスは、ネイティブ テスト プロジェクトで自動的に構成されます。
このトピックの内容
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()
テスト メソッド testMethodName に、1 つ以上の TEST_METHOD_ATTRIBUTE
マクロで定義された属性を追加します。
TEST_METHOD_ATTRIBUTE
マクロは名前 attributeName と値 attributeValue を持つ属性を定義します。
テスト クラス属性
BEGIN_TEST_CLASS_ATTRIBUTE(testClassName)
TEST_CLASS_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_CLASS_ATTRIBUTE()
テスト クラス testClassName に、TEST_CLASS_ATTRIBUTE
の 1 つ以上のマクロで定義された属性を追加します。
TEST_CLASS_ATTRIBUTE
マクロは名前 attributeName と値 attributeValue を持つ属性を定義します。
テスト モジュール属性
BEGIN_TEST_MODULE_ATTRIBUTE(testModuleName)
TEST_MODULE_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_MODULE_ATTRIBUTE()
テスト モジュール testModuleName に、TEST_MODULE_ATTRIBUTE
の 1 つ以上のマクロで定義された属性を追加します。
TEST_MODULE_ATTRIBUTE
マクロは名前 attributeName と値 attributeValue を持つ属性を定義します。
定義済みの属性
一般的なケースに便利なように、以下の定義済み属性マクロが提供されています。 これらは、上で説明したマクロ TEST_METHOD_ATTRIBUTE
の代わりに使用できます。
TEST_OWNER(ownerAlias)
名前 Owner
と属性値 ownerAlias で TEST_METHOD_ATTRIBUTE
を定義します。
TEST_DESCRIPTION(description)
名前 Description
と属性値 description で TEST_METHOD_ATTRIBUTE
を定義します。
TEST_PRIORITY(priority)
名前 Priority
と属性値 priority で TEST_METHOD_ATTRIBUTE
を定義します。
TEST_WORKITEM(workitem)
名前 WorkItem
と属性値 workItem で TEST_METHOD_ATTRIBUTE
を定義します。
TEST_IGNORE()
名前 Ignore
と属性値 true
で TEST_METHOD_ATTRIBUTE
を定義します。
CppUnitTestAssert.h
一般的なアサート
等しい
2 つのオブジェクトが等しいことを確認します
template<typename T>
static void Assert::AreEqual(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
2 つの倍精度小数点数が等しいことを確認します
static void Assert::AreEqual(
double expected,
double actual,
double tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
2 つの浮動小数点数が等しいことを確認します
static void Assert::AreEqual(
float expected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
2 つの char* 文字列が等しいことを確認します
static void Assert::AreEqual(
const char* expected,
const char* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
2 つの w_char* 文字列が等しいことを確認します
static void Assert::AreEqual(
const wchar_t* expected,
const wchar_t* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
等しくない
2 つの倍精度小数点数が等しくないことを確認します
static void Assert::AreNotEqual(
double notExpected,
double actual,
double tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
2 つの浮動小数点数が等しくないことを確認します
static void Assert::AreNotEqual(
float notExpected,
float actual,
float tolerance,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
2 つの char* 文字列が等しくないことを確認します
static void Assert::AreNotEqual(
const char* notExpected,
const char* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
2 つの w_char* 文字列が等しくないことを確認します
static void Assert::AreNotEqual(
const wchar_t* notExpected,
const wchar_t* actual,
bool ignoreCase = false,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
演算子 == に基づいて、2 つの参照が等しくないことを確認します
template<typename T>
static void Assert::AreNotEqual(
const T& notExpected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
同じである
2 つの参照が同じオブジェクト インスタンス (ID) を参照していることを確認します。
template<typename T>
static void Assert::AreSame(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
同じではない
2 つの参照が同じオブジェクト インスタンス (ID) を参照していないことを確認します。
template<typename T>
static void Assert::AreNotSame (
const T& notExpected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Null である
ポインターが NULL であることを確認します。
template<typename T>
static void Assert::IsNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Null ではない
ポインターが NULL ではないことを確認します
template<typename T>
static void Assert::IsNotNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
True である
条件が true であることを確認します
static void Assert::IsTrue(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
False である
条件が false であることを確認します
static void Assert::IsFalse(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
失敗
テスト ケースの結果が失敗するよう強制します
static void Assert::Fail(
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Windows ランタイム アサート
等しい
2 つの Windows ランタイム ポインターが等しいことを確認します。
template<typename T>
static void Assert::AreEqual(
T^ expected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
2 つの Platform::String^ 文字列が等しいことを確認します。
template<typename T>
static void Assert::AreEqual(
T^ expected,
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
同じである
2 つの Windows ランタイム参照が同じオブジェクトを参照していることを確認します。
template<typename T>
static void Assert::AreSame(
T% expected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
等しくない
2 つの Windows ランタイム ポインターが等しくないことを確認します。
template<typename T>
static void Assert::AreNotEqual(
T^ notExpected,
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
2 つの Platform::String^ 文字列が等しくないことを確認します。
static void Assert::AreNotEqual(
Platform::String^ notExpected,
Platform::String^ actual,
bool ignoreCase = false,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
同じではない
2 つの Windows ランタイム参照が同じオブジェクトを参照していないことを確認します。
template<typename T>
static void Assert::AreNotSame(
T% notExpected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
Null である
Windows ランタイム ポインターが nullptr であることを確認します。
template<typename T>
static void Assert::IsNull(
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
Null ではない
Windows ランタイム ポインターが nullptr ではないことを確認します。
template<typename T>
static void Assert::IsNotNull(
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
例外アサート
例外を想定する
関数が例外を発生させることを確認します。
template<typename _EXPECTEDEXCEPTION, typename _FUNCTOR>
static void Assert::ExpectException(
_FUNCTOR functor,
const wchar_t* message= NULL,
const __LineInfo* pLineInfo= NULL)
関数が例外を発生させることを確認します。
template<typename _EXPECTEDEXCEPTION, typename _RETURNTYPE>
static void Assert::ExpectException(
_RETURNTYPE (*func)(),
const wchar_t* message= NULL,
const __LineInfo* pLineInfo = NULL)
CppUnitTestLogger.h
ロガー
ロガー クラスには、出力ウィンドウに書き込むための静的メソッドが含まれます。
メッセージの書き込み
出力ウィンドウに文字列を書き込む
static void Logger::WriteMessage(const wchar_t* message)
static void Logger::WriteMessage(const char* message)
例
以下のコードは VSCppUnit の使用例です。 属性メタデータ、フィクスチャ、アサーションのある単体テスト、およびカスタム ログの例が含まれます。
// 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");
}
};