テストする関数をエクスポートするかどうかによって、DLL コードをテストする方法はいくつかあります。 次のいずれかの方法を選択してください。
DLL からエクスポートされた関数のみを単体テストで呼び出す: 「Visual Studio で C/C++ 用の単体テストを作成する」で説明されているように、別個のテスト プロジェクトを追加します。 このテスト プロジェクトで、DLL プロジェクトへの参照を追加します。
手順「テスト プロジェクトからエクスポートされた関数を参照するには」に移動します。
DLL は .exe ファイルとしてビルドされます。 別個のテスト プロジェクトを追加します。 これを出力オブジェクト ファイルにリンクします。
手順「テストをオブジェクトまたはライブラリ ファイルにリンクするには」に移動します。
DLL からエクスポートされない非メンバー関数を単体テストで呼び出し、DLL はスタティック ライブラリとしてビルドできます。.lib ファイルとしてコンパイルされるように、DLL プロジェクトを変更します。 テスト対象のプロジェクトを参照する、別のテスト プロジェクトを追加します。
この方法には、エクスポートされないメンバーをテストで使用できる一方で、独立したプロジェクトにテストが保持されるという利点があります。
「DLL をスタティック ライブラリに変更するには」の手順に移動します。
単体テストはエクスポートされない非メンバー関数を呼び出す必要があり、コードをダイナミック リンク ライブラリ (DLL) としてビルドする必要があります。 製品コードと同じプロジェクトに単体テストを追加します。
「同じプロジェクトに単体テストを追加するには」の手順に移動します。
テストを作成する
DLL をスタティック ライブラリに変更するには
DLL プロジェクトによってエクスポートされないメンバーをテストで使う必要があり、テスト対象のプロジェクトがダイナミック ライブラリとしてビルドされる場合は、これをスタティック ライブラリに変換することを検討します。
ソリューション エクスプローラーで、テスト対象プロジェクトのショートカット メニューの [プロパティ] をクリックします。 プロジェクトのプロパティ ウィンドウが開きます。
[構成プロパティ]>[全般] の順に選びます。
[構成の種類] を [スタティック ライブラリ (.lib)] に設定します。
手順「テストをオブジェクトまたはライブラリ ファイルにリンクするには」を続行します。
テスト プロジェクトからエクスポートされた DLL 関数を参照するには
テストする関数が DLL プロジェクトからエクスポートされる場合は、テスト プロジェクトからコード プロジェクトへの参照を追加できます。
ネイティブ単体テスト プロジェクトを作成します。
- [ファイル] メニューで、 [新規]>[プロジェクト]をクリックします。 [新しいプロジェクトの追加] ダイアログで、[言語] を C++ に設定し、検索ボックスに "test" と入力します。 次に [ネイティブ単体テスト プロジェクト] を選択します。
ソリューション エクスプローラーでテスト プロジェクトを右クリックして、[追加]>[参照] を選択します。
[プロジェクト] をクリックし、テスト対象のプロジェクトを選択します。
[追加] ボタンをクリックします。
テスト プロジェクトのプロパティで、テスト対象プロジェクトの場所をインクルード ディレクトリに追加します。
[構成プロパティ]>[VC++ ディレクトリ]>[インクルード ディレクトリ] の順に選びます。
[編集] をクリックし、テスト対象プロジェクトのヘッダー ディレクトリを追加します。
「単体テストを作成する」に進みます。
テストをオブジェクト ファイルまたはライブラリ ファイルにリンクするには
テストする関数が DLL でエクスポートされない場合は、出力された .obj ファイルまたは .lib ファイルをテスト プロジェクトの依存関係に追加できます。
ネイティブ単体テスト プロジェクトを作成します。
- [ファイル] メニューで、 [新規]>[プロジェクト]をクリックします。 [新しいプロジェクトの追加] ダイアログで、[言語] を C++ に設定し、検索ボックスに "test" と入力します。 次に [ネイティブ単体テスト プロジェクト] を選択します。
ソリューション エクスプローラーで、テスト プロジェクトのショートカット メニューの [プロパティ] を選びます。
[構成プロパティ]>[リンカー]>[入力]>[追加の依存ファイル] の順に選びます。
[編集] をクリックし、.obj ファイルまたは .lib ファイルの名前を追加します。 完全パス名は使用しないでください。
[構成プロパティ]>[リンカー]>[全般]>[追加のライブラリ ディレクトリ] の順に選びます。
[編集] をクリックし、.obj ファイルまたは .lib ファイルのディレクトリ パスを追加します。 一般的にパスは、テスト対象プロジェクトのビルド フォルダー内になります。
[構成プロパティ]>[VC++ ディレクトリ]>[インクルード ディレクトリ] の順に選びます。
[編集] をクリックし、テスト対象プロジェクトのヘッダー ディレクトリを追加します。
「単体テストを作成する」に進みます。
同じプロジェクトに単体テストを追加するには
単体テストに必要なヘッダーおよびライブラリ ファイルが含まれるように、製品コード プロジェクトのプロパティを変更します。
ソリューション エクスプローラーで、テスト対象プロジェクトのショートカット メニューの [プロパティ] を選びます。 プロジェクトのプロパティ ウィンドウが開きます。
[構成プロパティ]>[VC++ ディレクトリ] の順に選びます。
インクルード ディレクトリおよびライブラリ ディレクトリを編集します。
Directory プロパティ インクルード ディレクトリ $(VCInstallDir)Auxiliary\VS\UnitTest\include ライブラリ ディレクトリ $(VCInstallDir)Auxiliary\VS\UnitTest\lib
C++ 単体テスト ファイルを追加します。
ソリューション エクスプローラーでプロジェクト ノードを右クリックし、[追加]>[新しい項目] を選択します。
[新しい項目の追加] ダイアログで [C++ ファイル (.cpp)] を選択し、適切な名前を指定して、[追加] を選択します。
「単体テストを作成する」に進みます。
単体テストを記述する
各単体テスト コード ファイルに、テスト対象プロジェクトのヘッダー用に
#include
ステートメントを追加します。単体テスト コード ファイルに、テスト クラスとメソッドを追加します。 たとえば次のような点です。
#include "stdafx.h" #include "CppUnitTest.h" #include "MyProjectUnderTest.h" using namespace Microsoft::VisualStudio::CppUnitTestFramework; namespace MyTest { TEST_CLASS(MyTests) { public: TEST_METHOD(MyTestMethod) { Assert::AreEqual(MyProject::Multiply(2,3), 6); } }; }
テストの実行
[テスト] メニューで、[Windows]、[テスト エクスプローラー] の順に選択します。
ウィンドウに一部のテストしか表示されない場合は、次の方法でテスト プロジェクトをビルドします。ソリューション エクスプローラーで、該当するノードを右クリックし、[ビルド] または [リビルド] を選択します。
テスト エクスプローラーで、[すべて実行] を選択するか、または実行する特定のテストを選択します。 たとえばブレークポイントを有効にした場合のデバッグ モードでのテストの実行など、他のオプションについては、テストを右クリックします。