Visual Studio で C/C++ 用の単体テストを作成する

C++ についても、 [テスト エクスプローラー] ウィンドウを使って単体テストを作成して実行できます。 他の言語の場合と同じように動作します。 テスト エクスプローラー の使い方については、「テスト エクスプローラーを使用して単体テストを実行する」をご覧ください。

注意

Live Unit Testing、コード化された UI テスト、IntelliTest などの一部の機能は、C++ についてはサポートされていません。

Visual Studio には次の C++ テスト フレームワークが含まれており、追加のダウンロードは必要ありません。

  • C++ 用の Microsoft 単体テスト フレームワーク
  • Google Test
  • Boost.Test
  • CTest

インストールされているフレームワークを使用することも、Visual Studio 内で使いたいフレームワークに対応する独自のテスト アダプターを作成することもできます。 テスト アダプターによって、単体テストが [テスト エクスプローラー] ウィンドウと統合されます。 Visual Studio Marketplace では複数のサードパーティ製アダプターを利用できます。 詳細については、「サードパーティ製の単体テスト フレームワークをインストールする」をご覧ください。

Visual Studio 2017 以降 (Professional および Enterprise)

C++ 単体テスト プロジェクトでは CodeLens がサポートされています。

Visual Studio 2017 以降 (すべてのエディション) :

  • Google Test アダプター は、C++ によるデスクトップ開発 ワークロードの既定のコンポーネントとして含まれます。 ソリューションに追加できるプロジェクト テンプレートが含まれています。 ソリューション エクスプローラー でソリューション ノードを右クリックして、ショートカット メニューで [追加] > [新しいプロジェクト] の順に選択してプロジェクト テンプレートを追加します。 また、 [ツール] > [オプション] を使用して構成できるオプションもあります。 詳細については、Visual Studio での Google Test の使用に関する記事をご覧ください。

  • Boost.Test は、C++ によるデスクトップ開発 ワークロードの既定のコンポーネントとして含まれます。 テスト エクスプローラー とは統合されていますが、現時点ではプロジェクト テンプレートが含まれていません。 手動で構成する必要があります。 詳細については、Visual Studio での Boost.Test の使用に関する記事をご覧ください。

  • CTest のサポートは、C++ によるデスクトップ開発 ワークロードの一部である C++ CMake ツール コンポーネントで組み込まれます。 詳細については、Visual Studio での CTest の使用に関する記事をご覧ください。

Visual Studio 2015 以前

Google Test アダプターと Boost.Test アダプターは、Visual Studio Marketplace でダウンロードできます。 「Test adapter for Boost.Test」 (Boost.Test 用テスト アダプター) および「Test adapter for Google Test」 (Google Test 用テスト アダプター) にあります。

テストの基本的なワークフロー

以下のセクションでは、C++ の単体テストを始めるための基本的な手順を示します。 基本的な構成は、Microsoft と Google どちらのテスト フレームワークでも似ています。 Boost.Test では、テスト プロジェクトを手動で作成することが必要です。

Visual Studio 2022 でテスト プロジェクトを作成する

1 つまたは複数の テスト プロジェクト 内で単体テストを定義して実行します。 テスト プロジェクトは、実行可能ファイル内のコードを呼び出し、その動作を報告する個別のアプリを作成します。 テストするコードと同じソリューション内にテスト プロジェクトを作成します。

既存のソリューションに新しいテスト プロジェクトを追加するには、

  1. ソリューション エクスプローラー で、ソリューション ノードを右クリックします。
  2. ポップアップ メニューで、 [追加] > [新しいプロジェクト] の順に選択します。
  3. [言語][C++] に設定し、検索ボックスに「test」と入力します。 次の図は、C++ によるデスクトップ開発 ワークロードと UWP 開発 ワークロードがインストールされている場合に選ぶことができるテスト プロジェクトです。

Visual Studio 2022 の C++ テスト プロジェクト

Visual Studio 2019 でテスト プロジェクトを作成する

1 つまたは複数のテスト プロジェクト内でテストを定義して実行します。 テストするコードと同じソリューション内にプロジェクトを作成します。 既存のソリューションに新しいテスト プロジェクトを追加するには、

  1. ソリューション エクスプローラー で、ソリューション ノードを右クリックします。
  2. ポップアップ メニューで、 [追加] > [新しいプロジェクト] の順に選択します。
  3. [言語][C++] に設定し、検索ボックスに「test」と入力します。 次の図は、C++ によるデスクトップ開発 ワークロードと UWP 開発 ワークロードがインストールされている場合に選ぶことができるテスト プロジェクトです。

Visual Studio 2019 の C++ テスト プロジェクト

Visual Studio 2017 でテスト プロジェクトを作成する

1 つまたは複数のテスト プロジェクト内でテストを定義して実行します。 テストするコードと同じソリューション内にプロジェクトを作成します。 新しいテスト プロジェクトを追加するには、

  1. ソリューション エクスプローラー で、ソリューション ノードを右クリックして、 [追加] > [新しいプロジェクト] の順に選択します。

  2. 左側のウィンドウで、 [Visual C++ テスト] を選択します。 次に、中央のウィンドウでプロジェクトの種類のいずれかを選択します。 次の図は、C++ によるデスクトップ開発 ワークロードがインストールされている場合に選ぶことができるテスト プロジェクトです。

    C++ テスト プロジェクト

ソリューション内の他のプロジェクトへの参照を作成する

テスト対象プロジェクト内の関数にアクセスできるようにするには、テスト プロジェクト内のプロジェクトへの参照を追加します。 ソリューション エクスプローラー でプロジェクト ノードを右クリックして、ポップアップ メニューを表示します。 [追加] > [参照] の順に選択します。 [参照の追加] ダイアログで、テストするプロジェクトを選択します。

参照の追加

テストする関数がテスト コードでエクスポートされない場合は、出力された .obj または .lib のファイルをテスト プロジェクトの依存関係に追加します。 詳細については、「オブジェクト ファイルまたはライブラリ ファイルにテストをリンクするには」を参照してください。

ヘッダー ファイルの #include ディレクティブを追加する

次に、単体テストの .cpp ファイルで、テスト対象の型および関数が宣言されているヘッダー ファイルの #include ディレクティブを追加します。 「#include "」と入力すると、IntelliSense がアクティブ化して選択を支援します。 その他のヘッダーにも繰り返します。

ソリューション エクスプローラーのスクリーンショット。インクルードするヘッダー ファイルが強調表示された IntelliSense で追加される #include ディレクティブが示されています。

ソース ファイル内の各 include ステートメントに完全なパスを入力しなくても済むように、必要なフォルダーを [プロジェクト] > [プロパティ] > [C/C++] > [全般] > [追加のインクルード ディレクトリ] に追加します。

テスト メソッドを作成する

注意

ここでは、C/C++ の Microsoft 単体テスト フレームワークの構文を示します。 詳細については、「Microsoft.VisualStudio.TestTools.CppUnitTestFramework API リファレンス」を参照してください。 Google Test については、Google Test の入門に関するドキュメントをご覧ください。 Boost.Test については、「Boost Test library: The unit test framework」 (Boost Test ライブラリ: 単体テスト フレームワーク) を参照してください。

テスト プロジェクトの .cpp ファイルには、スタブ クラスとメソッドの定義が含まれています。 テスト コード記述方法の例として提供されています。 シグネチャでは TEST_CLASS および TEST_METHOD マクロが使われています。これにより、 [テスト エクスプローラー] ウィンドウでメソッドを見つけることができます。

[テスト エクスプローラー] ウィンドウのスクリーンショット。TEST_CLASS および TEST_METHOD のマクロを使用して、スタブ クラスとメソッドを含む unittest1.cpp コード ファイルが示されています。

TEST_CLASS と TEST_METHOD は、Microsoft ネイティブ テスト フレームワークの一部です。 テスト エクスプローラー は、サポートされている他のフレームワークのテスト メソッドも同様の方法で検出します。

TEST_METHOD は void を返します。 テスト結果を生成するには、Assert クラスの静的メソッドを使って、期待される結果に対して実際の結果をテストします。 次の例では、MyClassstd::string を受け取るコンストラクターがあるものとします。 この例では、コンストラクターでクラスが期待した方法で初期化されることをどのようにテストできるかを示します。

TEST_METHOD(TestClassInit)
{
    std::string name = "Bill";
    MyClass mc(name);
    Assert::AreEqual(name, mc.GetName());
}

前の例では、Assert::AreEqual の呼び出しの結果によって、テストが成功か失敗かが決まります。 Assert クラスには、期待される結果と実際の結果を比較する他の多くのメソッドが含まれています。

テスト メソッドに "特徴" を追加して、テストの所有者、優先度、他の情報を指定できます。 その後、これらの値を使って、テスト エクスプローラー でテストの並べ替えやグループ化を行うことができます。 詳細については、「テスト エクスプローラーを使用して単体テストを実行する」を参照してください。

テストを実行

  1. [テスト] メニューで、 [Windows][テスト エクスプローラー] の順に選択します。 次の図は、テストがまだ実行されていないテスト プロジェクトです。

    テスト実行前のテスト エクスプローラー

    注意

    CTest と テスト エクスプローラー の統合はまだ利用できません。 CTest のテストは CMake のメイン メニューから実行します。

  2. ウィンドウにいずれかのテストが不足している場合は、ソリューション エクスプローラー で、該当するノードを右クリックし、 [ビルド] または [リビルド] を選択して、テスト プロジェクトをビルドします。

  3. テスト エクスプローラー で、 [すべて実行] を選択するか、または実行する特定のテストを選択します。 ブレークポイントを有効にした場合のデバッグ モードでのテストの実行など他のオプションについては、テストを右クリックします。 すべてのテストを実行すると、ウィンドウに、合格したテストと失敗したテストが表示されます。

    テスト実行後のテスト エクスプローラー

失敗したテストについては、原因の診断に役立つ詳細がメッセージで表示されます。 失敗したテストを右クリックして、ポップアップ メニューを表示します。 [デバッグ] を選択し、失敗が発生した関数をステップ実行できます。

テスト エクスプローラー の使い方については、「テスト エクスプローラーを使用して単体テストを実行する」をご覧ください。

単体テストの詳細については、「単体テストの基本」をご覧ください。

CodeLens を使用する

Visual Studio 2017 以降 (Professional および Enterprise エディション)

CodeLens を使用すると、コード エディターを開いたままで単体テストの状態をすばやく確認できます。

次のいずれかの方法で、C++ 単体テスト プロジェクト用に CodeLens を初期化します。

  • テスト プロジェクトまたはソリューションを編集してビルドします。
  • プロジェクトまたはソリューションをリビルドします。
  • [テスト エクスプローラー] ウィンドウからテストを実行します。

初期化されたら、各単体テストの上にテストの状態アイコンが表示されます。

C++ の CodeLens アイコン

アイコンをクリックして詳細を表示するか、単体テストを実行またはデバッグします。

C++ の CodeLens の実行およびデバッグ

関連項目