プロジェクトの編成のベスト プラクティス

ソース コードに対して単体テストを実行する最善の方法は、ソース コードを保持するソリューション内に単体テスト ライブラリ プロジェクトを作成することです。

このような構成を使用する場合は、アプリケーションを 2 つ以上のプロジェクトに分けることをお勧めします。具体的には、アプリケーションを駆動し、インターフェイス要素を格納するメイン プロジェクトと、アプリケーション ロジックを含む 1 つ以上のその他のプロジェクトに分類します。これらのプロジェクトは、リンク ライブラリ プロジェクトである必要があります。

これは、単体テスト ライブラリ プロジェクトと連動できるリンク ライブラリ プロジェクトです。複数の単体テスト ライブラリ プロジェクトを 1 つのリンク ライブラリ プロジェクトと連動させることができますが、1 つの単体テスト ライブラリ プロジェクトを 1 つのリンク ライブラリ プロジェクトにリンクすることをお勧めします。1 つの単体テスト ライブラリ プロジェクトで複数のリンク ライブラリ プロジェクトをテストできますが、複雑になることがあるため、すべてのプロジェクトで 1 つの共通の場所をポイントするように出力する必要があります。

単体テスト ライブラリ プロジェクトをリンク ライブラリ プロジェクトにリンクするには、次が必要です。
  • リンク ライブラリ プロジェクト内にあるテスト対象のコードにリンクする手続きポインターが各テスト ケースに含まれている。
  • 単体テスト ライブラリ プロジェクトおよびテスト対象のリンク ライブラリ プロジェクトが同じ出力ディレクトリを共有している。

次に示す AirportDemo ソリューションの例では、AirportConsole プロジェクト (コンソール アプリケーション プロジェクト タイプ) を使用してアプリケーションを起動および駆動しており、インターフェイスのコーディングが含まれています。次に、このプロジェクトは、計算、条件テストなどを実行するために AirportLib プロジェクト (リンク ライブラリ プロジェクト タイプ) を呼び出して、全体として完全なアプリケーションを提供します。アプリケーション ロジックの単体テストを行うために、個別の単体テスト ライブラリ プロジェクト (TestAirportLib) は、リンク ライブラリ プロジェクト (AirportLib) を呼び出して、コードが適切に動作していることを確認します。また、単体テスト ライブラリ プロジェクトをこのソリューションに追加し、同じリンク ライブラリ プロジェクトを呼び出すこともできます。

単体テスト ライブラリ プロジェクトは、自己完結型にすることもできます。この場合、テストするロジックがテスト ケースと同じプロジェクトに存在することになります。ただし、上記のモデルでは、最新のソースでテストを行うようにし、必要な重複コードの量を減らしています。

複数の単体テスト ライブラリ プロジェクト

ソリューションに複数の単体テスト ライブラリ プロジェクトが含まれている場合は、次のガイドラインに従ってください。

  • 各単体テスト ライブラリ プロジェクトが 1 つのリンク ライブラリ プロジェクトだけを呼び出すようにします。ただし、複数の単体テスト ライブラリ プロジェクトが同じリンク ライブラリ プロジェクトを呼び出すようにすることはできます。
  • すべてのテスト プログラム名およびそのプログラム内のエントリ ポイントが、ソリューションの範囲内で一意になるようにします。つまり、単体テスト ライブラリ プロジェクトに、同じソリューション内の他の単体テスト ライブラリ プロジェクトと同じ名前のテスト プログラムまたはエントリ ポイントが含まれないようにします。これは、アプリケーション ロジックを含むプロジェクトを呼び出すすべての単体テスト出力で同じ出力フォルダーが共有されるためです。名前が重複している場合は、1 回のテスト実行で複数のテスト ケースを実行すると出力ファイルが上書きされます。

データ駆動型テスト

同じデータ ファイルを必要とする複数のデータ駆動型テストを実行する場合は、次のガイドラインに従ってください。

  • テスト プログラムごとにデータ ファイルの個別のコピーを使用して、各データ ファイルの名前がソリューションの範囲内で一意になるようにします。繰り返しになりますが、これは、複数のテスト ケースを実行すると、各テスト ケースに必要なファイルが共有の出力場所にコピーされるためです。同じ名前のデータ ファイルがある場合、それらのファイルは上書きされるため、異なるテスト ケースで使用される可能性があります。
  • 各データ ファイルは、関連する単体テスト ライブラリ プロジェクト内にある成果物であり、外部にリンクされているものではありません。
  • テスト ケースが実行されるたびに各データ ファイルが出力ディレクトリにコピーされるように設定して、常に最新バージョンのファイルを使用するようにします。