テスト エクスプローラー ウィンドウを使用して、C++ 単体テストを記述して実行できます。 他の言語の場合と同じように動作します。 テスト エクスプローラーの使用方法の詳細については、「テスト エクスプローラーで単体テストを実行する」を参照してください。
注
Live Unit Testing、コード化された UI テスト、IntelliTest などの一部の機能は、C++ ではサポートされていません。
Visual Studio には、追加のダウンロードを必要とせず、次の C++ テスト フレームワークが含まれています。
- C++ 用 Microsoft 単体テスト フレームワーク
- Google Test
- Boost.Test
- CTest
インストールされているフレームワークを使用することも、Visual Studio 内で使用する任意のフレームワーク用の独自のテスト アダプターを作成することもできます。 テスト アダプターは、単体テストを テスト エクスプローラー ウィンドウと統合します。 Visual Studio Marketplace では、いくつかの Microsoft 以外のアダプターを使用できます。 詳細については、「 単体テスト フレームワークのインストール」を参照してください。
Visual Studio 2017 以降 (Professional および Enterprise)
C++ 単体テスト プロジェクトでは 、CodeLens がサポートされています。
Visual Studio 2017 以降 (すべてのエディション)
Google テスト アダプター は、C++ ワークロードを使用した デスクトップ開発 の既定のコンポーネントとして含まれています。 これには、ソリューションに追加できるプロジェクト テンプレートがあります。 ソリューション エクスプローラーでソリューション ノードを右クリックし、ショートカット メニューの [追加>新しいプロジェクト] を選択して、プロジェクト テンプレートを追加します。 また、 Tools>Options を使用して構成できるオプションもあります。 詳細については、「 方法: Visual Studio で Google Test を使用する」を参照してください。
Boost.Test は、C++ ワークロードを使用した デスクトップ開発 の既定のコンポーネントとして含まれています。 テスト エクスプローラーと統合されていますが、現在、プロジェクト テンプレートはありません。 手動で構成する必要があります。 詳細については、「 方法: Visual Studio で Boost.Test を使用する」を参照してください。
CTest のサポートは、C++ によるデスクトップ開発ワークロードの一部である C++ CMake ツール コンポーネント に 含まれています。 詳細については、「 方法: Visual Studio で CTest を使用する」を参照してください。
以前のバージョンの Visual Studio
Google Test アダプターと Boost.Test Adapter 拡張機能は、Visual Studio Marketplace でダウンロードできます。 Boost.Test 用のテスト アダプターと Google Test 用のテスト アダプターで見つけます。
ヒント
また、Copilot /tests スラッシュ コマンドを使用して、コードから単体テストを生成することもできます。 たとえば、「 /tests using Boost framework 」と入力して Boost.Test テストを生成できます。 詳細については、「 Copilot Chat でスラッシュ コマンドを使用する」を参照してください。
基本的なテスト ワークフロー
次のセクションでは、C++ 単体テストを開始するための基本的な手順を示します。 基本的な構成は、Microsoft と Google の両方のテスト フレームワークで似ています。 Boost.Test では、テスト プロジェクトを手動で作成する必要があります。
Visual Studio 2022 でテスト プロジェクトを作成する
1 つ以上の テスト プロジェクト内で単体テストを定義して実行します。 テスト プロジェクトは、実行可能ファイル内のコードを呼び出し、その動作を報告する別のアプリを作成します。 テストするコードと同じソリューションでテスト プロジェクトを作成します。
既存のソリューションに新しいテスト プロジェクトを追加するには:
- ソリューション エクスプローラーで [ソリューション] ノードを右クリックします。
- コンテキスト メニューの [ 追加>新しいプロジェクト] を選択します。
- [言語] を [C++] に設定し、検索ボックスに「test」と入力します。 次のスクリーンショットは、 C++ によるデスクトップ開発 と UWP 開発 ワークロードのインストール時に使用できるテスト プロジェクトを示しています。
Visual Studio 2019 でテスト プロジェクトを作成する
1 つ以上のテスト プロジェクト内でテストを定義して実行します。 テストするコードと同じソリューションでプロジェクトを作成します。
既存のソリューションに新しいテスト プロジェクトを追加するには:
- ソリューション エクスプローラーで [ソリューション] ノードを右クリックします。
- コンテキスト メニューの [ 追加>新しいプロジェクト] を選択します。
- [言語] を [C++] に設定し、検索ボックスに「test」と入力します。 次のスクリーンショットは、 C++ によるデスクトップ開発 と UWP 開発 ワークロードのインストール時に使用できるテスト プロジェクトを示しています。
ソリューション内の他のプロジェクトへの参照を作成する
テスト対象のプロジェクト内の関数へのアクセスを有効にするには、テスト プロジェクト内のプロジェクトへの参照を追加します。 ソリューション エクスプローラーで、テスト プロジェクトを展開します。 [ 参照 ] を右クリックし、[ 追加>参照] を選択します。 [ 参照の追加 ] ダイアログ ボックスで、テストするプロジェクトを選択します。
オブジェクトまたはライブラリ ファイルへのリンク
テスト コードでテストしたい関数がエクスポートされていない場合は、出力 .obj または .lib ファイルをテスト プロジェクトの依存関係に追加してください。 詳細については、「 テストをオブジェクトまたはライブラリ ファイルにリンクするには」を参照してください。
main関数を持つオブジェクト ファイルや、wmain、WinMain、DllMainなどの別の標準エントリ ポイントは含めないでください。 新しいソース ファイルをプロジェクトに追加する場合は、対応するオブジェクト ファイルを含むようにテスト プロジェクトの依存関係を更新します。
ヘッダーファイルの #include ディレクティブを追加する
単体テスト .cpp ファイルで、テストする型と関数を宣言するヘッダー ファイルの #include ディレクティブを追加します。
#include "入力し、IntelliSense がアクティブになり、選択に役立ちます。 それ以上のヘッダーに対して繰り返します。
ヒント
ソース ファイル内の各 include ステートメントに完全なパスを入力する必要がないようにするには、 Project>Properties>C/C++>General>Additional Include Directories に必要なフォルダーを追加します。
テスト メソッドを記述する
注
このセクションでは、C/C++ 用 Microsoft Unit Testing Framework の構文を示します。 詳細については、 Microsoft.VisualStudio.TestTools.CppUnitTestFramework API リファレンスを参照してください。
Google Test のドキュメントについては、 Google Test 入門を参照してください。 Boost.Test については、「 Boost テスト ライブラリ: 単体テスト フレームワーク」を参照してください。
テスト プロジェクトの .cpp ファイルには、スタブ クラスとメソッドが定義されています。 テスト コードの記述方法の例を示します。 シグネチャでは、TEST_CLASSマクロと TEST_METHOD マクロを使用します。このマクロを使用すると、 テスト エクスプローラー ウィンドウからメソッドを検出できるようになります。
TEST_CLASSとTEST_METHODは、 Microsoft ネイティブ テスト フレームワークの一部です。 テスト エクスプローラーは 、同様の方法で、サポートされている他のフレームワークのテスト メソッドを検出します。
TEST_METHODは void を返します。 テスト結果を生成するには、 Assert クラスの静的メソッドを使用して、予想される結果に対して実際の結果をテストします。 次の例では、 MyClass に std::stringを受け取るコンストラクターがあるとします。 この例では、コンストラクターが期待した方法でクラスを初期化することをテストする方法を示します。
TEST_METHOD(TestClassInit)
{
std::string name = "Bill";
MyClass mc(name);
Assert::AreEqual(name, mc.GetName());
}
前の例では、 Assert::AreEqual 呼び出しの結果によって、テストが成功したか失敗したかが決まります。
Assert クラスには、期待される結果と実際の結果を比較する他の多くのメソッドが含まれています。
テスト メソッドに 特性 を追加して、テストの所有者、優先度、およびその他の情報を指定できます。 その後、これらの値を使用して、 テスト エクスプローラーでテストを並べ替えたりグループ化したりできます。 詳細については、「 テスト エクスプローラーを使用した単体テストの実行」を参照してください。
テストの実行
[ テスト ] メニューの [ テスト エクスプローラー] を選択します。 次の図は、テストを実行する前のテスト プロジェクトを示しています。
注
テスト エクスプローラーとの CTest 統合はまだ使用できません。 CMake のメイン メニューから CTest テストを実行します。
いずれかのテストがウィンドウに表示されない場合は、ソリューション エクスプローラーでノードを右クリックし、[ビルド] または [リビルド] を選択して、テスト プロジェクトをビルドします。
テスト エクスプローラーで、[すべて実行] を選択するか、実行する特定のテストを選択します。 ブレークポイントを有効にしてデバッグ モードで実行するなど、他のオプションのテストを右クリックします。 すべてのテストが実行されると、ウィンドウに合格したテストと失敗したテストが表示されます。
失敗したテストの場合、原因の診断に役立つ詳細がメッセージに表示されます。 失敗したテストを右クリックして、ポップアップ メニューを表示します。 [ デバッグ ] を選択して、エラーが発生した関数をステップ実行します。
テスト エクスプローラーの使用方法の詳細については、「テスト エクスプローラーで単体テストを実行する」を参照してください。
単体テストの詳細については、「 単体テストの基本」を参照してください。
CodeLens を使用する
Visual Studio 2017 以降 (Professional エディションと Enterprise エディション)
CodeLens を使用すると、コード エディターを離れることなく、単体テストの状態をすばやく確認できます。
次のいずれかの方法で、C++ 単体テスト プロジェクトの CodeLens を初期化します。
- テスト プロジェクトまたはソリューションを編集してビルドします。
- プロジェクトまたはソリューションをリビルドします。
- テスト エクスプローラー ウィンドウからテストを実行します。
CodeLens を初期化すると、各単体テストの上にテスト状態アイコンが表示されます。
詳細については、アイコンを選択するか、単体テストを実行またはデバッグします。