単体テストの構造

単体テストの作成時に、ソリューションにいくつかのファイルが追加されます。 このトピックでは、最も一般的なファイルを説明するため、単体テストの例を使用します。 この例は、「チュートリアル : 単体テストの作成と実行」のトピックに挙げられたものです。

単体テスト ファイルの部分

単体テストの作成時に、テストするクラスごとに、個別の単体テスト ファイルが作成されます。 各単体テスト ファイルには、テストするメソッドごとのテスト メソッドが格納されます。 この例では、テストするメソッドの両方が同じクラスに属しています。 したがって、作成されるテスト クラス ファイルは BankAccountTest.cs の 1 つだけです。

ファイルの最上部のセクション

次の図に、名前空間への参照、TestClassAttribute、および TestContext クラスを含む最初の数行のコードを示します。 コード サンプルが必要な場合はチュートリアルを参照してください。

サンプル単体テスト ファイルの上部セクション

  1. Microsoft.VisualStudio.TestTools.UnitTesting: 単体テストの作成時、Microsoft.VisualStudio.TestTools.UnitTesting 名前空間への参照がテスト プロジェクトに追加され、名前空間が単体テスト ファイルの最上部の使用するステートメントに含められます。 名前空間には、単体テストに役立つ次のような多数のクラスがあります。

    • 単体テストの条件を検証するために使用できる Assert クラス

    • 特定の開始状態および終了状態を保証する目的で単体テストの実行前後にコードを実行するための初期化属性およびクリーンアップ属性

    • 特定の種類の例外が単体テストの実行中にスローされることを確認するための、ExpectedException 属性

    • データ ドリブン テストと ASP.NET Web サービス用の単体テストを実行するために必要なデータとのデータ接続など、単体テストに提供される情報を格納する TestContext クラス

    詳細については、「Microsoft.VisualStudio.TestTools.UnitTesting」を参照してください。

  2. TestClassAttribute: 単体テストの作成時、TestClassAttribute は、この特定のクラスに [TestMethod()] 属性としてマークされたメソッドが格納される可能性があることを示すためにテスト ファイルに含められます。 TestClassAttribute のないテスト メソッドは無視されます。

    テスト クラスは、同じアセンブリ内の別のテスト クラスからメソッドを継承できます。 したがって、基本テスト クラスでテスト メソッドを作成し、それらのメソッドを派生テスト クラスで使用することができます。

    詳細については、「TestClassAttribute」を参照してください。

  3. TestContext: 単体テストの作成時、各テスト クラスに testContextInstance という名前の変数が含められます。 TestContext クラスのプロパティには、現在のテストに関する情報が格納されます。 詳細については、「TestContext」を参照してください。

ファイルの最下部のセクション

次の図に、チュートリアルで生成されたコードの下部を示します。ここには "追加のテスト属性" セクション、TestMethod 属性、およびメソッドのロジックが含まれ、これに Assert ステートメントが含まれます。

サンプル単体テスト ファイルの下部セクション

  1. 追加のテスト属性: このセクションを展開すると、コメントアウトされたメソッドが表示されます。これらのメソッドを使用して、次の属性で初期化およびクリーンアップを含めることができます。

    1. [ClassInitialize()]   クラスで最初のテストを実行する前に、ClassInitialize を使用してコードを実行します。

    2. [ClassCleanUp()]   クラスのすべてのテストを実行した後に、ClassCleanup を使用してコードを実行します。

    3. [TestInitialize()]   各テストを実行する前に、TestInitialize を使用してコードを実行します。

    4. [TestCleanUp()]   各テストを実行した後に TestCleanup を使用してコードを実行します。

      [ClassInitialize()] 属性または [TestInitialize()] 属性でマークされたメソッドを作成して、単体テストが実行される環境を準備します。 これを行う目的は、単体テストの実行で既知の状態を確立することです。 たとえば、[ClassInitialize()] メソッドまたは [TestInitialize()] メソッドを使用して、テストに使用する特定のデータ ファイルをコピー、変更、または作成できます。

      [ClassCleanup()] 属性または [TestCleanUp{}] 属性でマークされたメソッドを作成し、テストの実行後に環境を既知の状態に戻します。 これは、フォルダー内のファイルの削除、またはデータベースを既知の状態に戻すことを示す場合があります。 オーダー エントリ アプリケーションで使用されるメソッドをテストした後で、在庫データベースを初期状態にリセットすることがこの例です。

      注意

      ファイナライザー メソッド内ではなく、[TestCleanup()] メソッド内または [ClassCleanup()] メソッド内のクリーンアップ コードを使用することをお勧めします。 ファイナライザー メソッドからスローされる例外はキャッチされず、予期しない結果が生じる可能性があります。

  2. TestMethodAttribute: 単体テストの作成時、各単体テスト メソッドは [TestMethod()] 属性でマークされます。 この属性が存在しないと、単体テストは実行されません。 TestMethod 属性の詳細については、「TestMethodAttribute」を参照してください。

  3. テスト メソッドのロジック (Assert ステートメントを含む): 生成された各単体テストには、空の変数とプレースホルダーの Assert ステートメントがあります。 既定のプレースホルダーの Assert ステートメントは、通常、Assert.Inconclusive ステートメントです。 テストを意味のあるものにするために、変数を初期化し、このプレースホルダーを適切な Assert ステートメントに置き換える必要があります。

    この例では、CreditTest 単体テスト メソッドは、メソッドの TODO ステートメントを含めて生成時の状態のままにしています。 ただし、DebitTest テスト メソッドの変数を初期化して Assert ステートメントを置き換えています。 TODO ステートメントは、コードのこれらの行を初期化するための注意を促すものとして機能します。

    注意

    テスト メソッドの内容は、単体テストとテストするメソッドの性質に応じて異なる場合があります。

名前付け規則に関するメモ: Visual Studio のテスト ツールでは、単体テストの生成時に名前付け規則が使用されます。 たとえば単体テスト ファイルの名前は、"Test" という単語とテストするコードが含まれているファイル名を連結させて付けられ、このトピックの例では "BankAccountTest.cs" になります。 テスト クラスとテスト メソッドの名前も、既定値を使用して生成されます。 これらの既定値は、[単体テストの作成] ダイアログ ボックスの [設定] をクリックすると表示される [テスト生成の設定] ダイアログ ボックスで変更することもできます。

ソリューションに追加される項目

このセクションでは、「チュートリアル : 単体テストの作成と実行」で生成される単体テスト ファイル以外のファイルについて説明します。

注意

これらのファイルは、単体テストの生成時にテスト プロジェクト設定に応じて既定で作成されます。 これらの設定を変更するには、[ツール] をクリックし、[オプション] をクリックします。 [オプション] ダイアログ ボックスで、[テスト ツール] を展開し、[テスト プロジェクト] をクリックします。

次の図に、この例のプロジェクト用の単体テストの作成後のソリューション エクスプローラーを示します。

サンプル単体テスト プロジェクトのソリューション エクスプローラー

  1. ソリューション項目: ソリューション項目には、次の 2 つのファイルが含まれます。

    • Local.testsettings: これらの設定によって、診断データを収集しないローカル テストの実行方法が制御されます。

    • Bank.vsmdi: このファイルには、ソリューション内にあり、[テスト リスト エディター] ウィンドウを設定するテスト リストに関する情報が格納されます。

    • TraceAndTestImpact.testsettings: これらの設定によって、診断データの特定のセットを収集するローカル テストの実行方法が制御されます。

  2. テスト プロジェクト: 単体テストに必要なその他のファイルが格納されます。

  3. テスト プロジェクト プロパティ: プロジェクトのビルド オプションを提供する AssemblyInfo.cs ファイルが含まれます。

  4. テスト プロジェクト参照: 単体テストの実行に必要な参照が格納されます。 単体テストを既存のコードから生成する場合、必要な参照が含まれます。 ただし、テストをカスタマイズするために参照を追加できます。

  5. 単体テスト ファイル: このトピックの最初のセクションで説明した単体テスト ファイルです。 テストするクラスごとに、個別の単体テスト ファイルがテスト プロジェクト内に作成されます。 この例では、テストするメソッドの両方が同じクラスに属しています。 したがって、作成されるテスト クラス ファイルは BankAccountTest.cs の 1 つだけです。

参照

参照

Microsoft.VisualStudio.TestTools.UnitTesting

概念

既存コードに対する単体テストの作成と実行

ユニット テストと C++

ジェネリック メソッドの単体テスト

ASP.NET Web サービスの単体テスト

プライベート メソッド、内部メソッド、およびフレンド メソッドの単体テスト