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
テスト クラスとメソッドを作成します。
TEST_CLASS(className)
テスト メソッドを含むクラスごとに必要です。テスト クラスとして className を識別します。TEST_CLASS は namescape のスコープで宣言する必要があります。
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()
TEST_METHOD_ATTRIBUTE の一つ以上のマクロに定義されたテスト メソッド testClassNameに属性を追加します。
TEST_METHOD_ATTRIBUTE のマクロは attributeName 名前と値 attributeValueを使用してこの属性を定義します。
テスト クラスの属性
BEGIN_TEST_CLASS_ATTRIBUTE(testClassName)
TEST_CLASS_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_CLASS_ATTRIBUTE()
TEST_CLASS_ATTRIBUTE の一つ以上のマクロに定義されているテスト testClassNameクラスに属性を追加します。
TEST_CLASS_ATTRIBUTE のマクロは attributeName 名前と値 attributeValueを使用してこの属性を定義します。
テストの属性
BEGIN_TEST_MODULE_ATTRIBUTE(testModuleName)
TEST_MODULE_ATTRIBUTE(attributeName, attributeValue)
...
END_TEST_MODULE_ATTRIBUTE()
TEST_MODULE_ATTRIBUTE の一つ以上のマクロに定義されたテストの testModuleNameモジュールに属性を追加します。
TEST_MODULE_ATTRIBUTE のマクロは attributeName 名前と値 attributeValueを使用してこの属性を定義します。
定義済みの属性
これらの定義済み属性マクロは、前に説明したマクロ 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
一般の Assert
等しい場合は。
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)
等しくない場合は。
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)
同じです
2 種類の参照が同じオブジェクト インスタンス (ID) を示すことを確認します。
template<typename T>
static void AreSame(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
同じではありません。
2 種類の参照が同じオブジェクト インスタンス (ID) を参照しないことを確認します。
template<typename T>
static void AreNotSame (
const T& notExpected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
null です
ポインターが null であることを確認します。
template<typename T>
static void IsNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
null ではありません。
ポインターが null でないことを確認します。
template<typename T>
static void IsNotNull(
const T* actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
当てはまります。
条件が True であることを確認します。
static void IsTrue(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
false です
条件が false であることを確認します。
static void IsFalse(
bool condition,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
失敗
テスト ケースの結果が失敗するように強制します。
static void Fail(
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)
Windows のランタイムの Assert
等しい場合は。
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)
同じです
Windows の 2 回の実行時参照が同じオブジェクトを参照することを示すことを確認します。
template<typename T>
static void AreSame(
T% expected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
等しくない場合は。
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)
同じではありません。
Windows の 2 回の実行時参照が同じオブジェクトを参照していないことを確認します。
template<typename T>
static void AreNotSame(
T% notExpected,
T% actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
null です
Windows のランタイムのポインターが nullptr であることを確認します。
template<typename T>
static void IsNull(
T^ actual,
Platform::String^ message = nullptr,
const __LineInfo* pLineInfo= nullptr)
null ではありません。
Windows のランタイムのポインターが nullptr でないことを確認します。
template<typename T>
static void IsNotNull(
T^ actual,
Platform::String^ message= nullptr,
const __LineInfo* pLineInfo= nullptr)
例外の Assert
例外を要求します。
関数が例外を発生させてください:
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
ロガー
logger クラスに書き込むには、静的メソッドが含まれています
class Logger
メッセージの書き込み
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");
}
};