テスト エクスプローラーを使用した既存の C++ アプリケーションの単体テスト

ここでは、単体テストでの優れた柔軟性があることを既存のアプリケーションを変更する前に、ようにすることをお勧めします。これは、変更がバグが生じないことを作成できます。アプリケーションに既に単体テストがない場合は、このトピックの手法を使用して要素を追加できます。このトピックでは、コードを決定すること、および、Microsoft Visual Studio 2012の Visual C++ のコードの単体テストを作成し、以降テストする方法の追加方法と、最終的にテストを実行する書き込みついて説明します。

決定して、コードをテストする方法を

既存の C++ プロジェクトを開き、単体テストをどのように適用するかを決定するために確認します。コードの依存関係を表示するのにあるモデリング ツールを使用する可能性があるパートの相互作用を理解するのに役立ちます。詳細については、「コードの視覚化および理解」を参照してください。

ここでは、小さいタスクに変更を分離することをお勧めします。それぞれの小さな変更前、動作の変更点の単体テストを作成する。これらのテストは、変更を加えた後合格し続けます。名ではなく、姓でユーザーのリストを並べ替えるように作られた並べ替え関数を変更する場合は、すべての入力名前は出力に表示されることを確認する単体テストを作成できます。変更を加えた後、新しい動作の新しい単体テストを追加する必要があります。

これは実用的であれば、単体テスト、またはすべてエクスポート関数のみ使用する必要があります。ただし、アプリケーション全体、ごく一部を変更した場合、エクスポート関数を使用する場合があります。たとえば、内部関数を呼び出す、またはテストがある場合もあります。内部変数の値を設定し、テストを取得する。

テストするインターフェイスを公開するかどうかによって、製品コードをテストする方法はいくつかあります。次の 1 種類を選択する:

  • 単体テストでは、テスト対象のコードからエクスポートされる関数のみ使用します:
    他のテスト プロジェクトを追加します。テスト プロジェクトでは、テスト対象のプロジェクトへの参照を追加します。
プロシージャ テスト プロジェクトを作成すると、参照コード プロジェクトに移動します。
  • テスト対象のコードは、.exe ファイルとしてビルド:
    他のテスト プロジェクトを追加します。出力のオブジェクト ファイルにリンク。

    プロシージャ テスト プロジェクトを作成すると、参照コード オブジェクト ファイルに移動します。

  • 単体テストはプライベート関数とデータを使用し、テスト対象のコードは、スタティック ライブラリとしてビルドできます:
    .lib ファイルにコンパイルするようにプロジェクトを変更します。テスト対象の他のテスト プロジェクトとプロジェクト参照を追加します。

    この方法には、テストがプライベート メンバーを使用できるようにする利点がありますが、別のプロジェクトでテストを保持します。ただし、動的リンク ライブラリ (.dll) を持つ必要があるアプリケーションに適していないことがあります。

    プロシージャ コードをスタティック ライブラリに変更するにはに移動します。

  • 単体テストはプライベート関数とデータを使用するコードは動的リンク ライブラリ (DLL) としてビルドする必要があります:
    製品コードと同じプロジェクトで単体テストを追加します。

    プロシージャ 同じプロジェクトで単体テストを追加するにはに移動します。

テストの作成

コードをスタティック ライブラリに変更するには

  • テストが動的ライブラリとしてビルド、スタティック ライブラリに変換することを検討してテスト対象のプロジェクト、およびテスト対象のプロジェクトによってエクスポートされたメンバーを使用する必要があります。

    1. テスト対象のプロジェクトのショートカット メニューの [ソリューション エクスプローラーで、[プロパティ]、を選択します。プロジェクト プロパティ ウィンドウが開きます。

    2. [構成プロパティ]、**[全般]**を選択します。

    3. **[スタティック ライブラリ (.lib)]**に [構成の種類] を設定します。

プロシージャ エクスポート関数のテスト プロジェクトを作成するにはを続行します。

テスト プロジェクトからのエクスポート関数を参照するには

  • テストするテスト対象のプロジェクトが関数をエクスポートするテスト プロジェクトからコード プロジェクトに参照を追加できます。

    1. C ++. のテスト プロジェクトを作成します。

      • [ファイル] で、メニューの 新規[プロジェクト]Visual C++、***[テスト]C++ 単体テスト プロジェクトを選択します。
    2. テスト プロジェクトのショートカット メニューの [ソリューション エクスプローラーで、[参照]、を選択します。プロジェクト プロパティ ウィンドウが開きます。

    3. 選択 [共通プロパティ]、**[Framework と参照]**は、を [新しい参照の追加] のボタンをクリックします。

    4. 次に、テストする プロジェクトとプロジェクトを選択します。

      [追加] ボタンをクリックします。

    5. テスト プロジェクトのプロパティで、インクルード ディレクトリにプロジェクトの場所を追加します。

      [構成プロパティ][VC++ ディレクトリ]、**[インクルード ディレクトリ]**を選択します。

      **[編集]**を選択し、テスト対象のプロジェクト ヘッダーのディレクトリを追加します。

単体テストを作成できます。に移動します。

テストをオブジェクトまたはライブラリ ファイルにリンクするには

  • テスト対象のコードがテストする関数をエクスポートし、テスト プロジェクトの依存関係に出力 .obj.lib ファイルを追加できます。

    1. C ++. のテスト プロジェクトを作成します。

      • [ファイル] で、メニューの 新規[プロジェクト]Visual C++、***[テスト]C++ 単体テスト プロジェクトを選択します。
    2. テスト プロジェクトのショートカット メニューの [ソリューション エクスプローラーで、[プロパティ]、を選択します。プロジェクト プロパティ ウィンドウが開きます。

    3. [構成プロパティ][リンカー][入力]、**[追加の依存ファイル]**を選択します。

      [編集]を選択し、.obj または .lib ファイル名を追加します。完全パス名を使用しないでください。

    4. [構成プロパティ][リンカー][全般]、**[追加のライブラリ ディレクトリ]**を選択します。

      [編集]を選択し、.obj または .lib ファイルのディレクトリ パスを追加します。パスには、テスト対象にプロジェクトのビルド フォルダー内です。

    5. [構成プロパティ][VC++ ディレクトリ]、**[インクルード ディレクトリ]**を選択します。

      **[編集]**を選択し、テスト対象のプロジェクト ヘッダーのディレクトリを追加します。

単体テストを作成できます。に移動します。

同じプロジェクトで単体テストを追加するには

  1. 単体テストに必要なライブラリ ファイルとヘッダーを含む製品コード プロジェクトのプロパティを変更します。

    1. テスト対象のプロジェクトのショートカット メニューの [ソリューション エクスプローラーで、プロパティを選択します。プロジェクト プロパティ ウィンドウが開きます。

    2. [構成プロパティ]、**[VC++ ディレクトリ]**を選択します。

    3. Include およびライブラリ ファイルを編集する:

      [ インクルード ディレクトリ]

      $(VCInstallDir)UnitTest\include;$(IncludePath)

      [ライブラリ ディレクトリ]

      $(VCInstallDir)UnitTest\lib;$(LibraryPath)

  2. C ++. の単体テスト ファイルを追加します:

    • プロジェクトのショートカット メニューの [ソリューション エクスプローラーで、追加新しい項目を選択し、C++ 単体テストを選択します。

単体テストを作成できます。に移動します。

単体テストを作成できます。

  1. 各単体テスト コード ファイルでは、テスト対象のプロジェクトのヘッダーの #include のステートメントを追加します。

  2. 単体テスト コード ファイルにテスト クラスとメソッドを追加します。以下はその例です。

    #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);
          }
      };
    }
    

詳細については、「テスト エクスプローラーを使用したネイティブ コードの単体テスト」を参照してください。

テストを実行します。

  1. [表示] で、メニューの [その他のウィンドウ]、**[テスト エクスプローラー]**を選択します。

  2. テストのエクスプローラーで、**[すべて実行]**を選択します。

詳細については、「クイック スタート: テスト エクスプローラーによるテスト駆動開発」を参照してください。