方法: 単体テストを作成して実行する
単体テストを実行することにより、開発者およびテスト担当者は、C#、Visual Basic、.NET、および C++ のプロジェクトでクラスのメソッドに論理エラーがないかをすばやく確認できます。 単体テストは、1 回作成するだけでよく、バグが追加されていないことを確認するために、ソース コードが変更されるたびに実行できます。
このトピックでは、Microsoft Visual Studio 2010 の単体テスト ツールを使用して、既存のコードから単体テストのスケルトンを自動的に生成する方法、検証を追加してそのスケルトンを設定する方法、テスト カテゴリを作成する方法、テスト リストを作成する方法、テストを実行する方法、およびコード カバレッジの結果を確認する方法について説明します。
単体テスト部分の詳細については、「単体テストの構造」を参照してください。
単体テストの例
この例は、「チュートリアル : 単体テストの作成と実行」に基づいています。
以下に、[単体テストの作成] ダイアログ ボックスの図を示します。 このダイアログ ボックスは、メソッドが含まれているコード ファイルを右クリックし、[単体テストの作成] をクリックすると表示されます。 このダイアログ ボックスの [型] の一覧で選択したすべてのメソッドについて、単体テストが生成されます。
次の図は、この例では Credit メソッドおよび Debit メソッドについて単体テストが生成されることを示しています。
単体テストを生成すると、コード ファイルが作成され、変更内容がソリューション エクスプローラーに表示されます。
次の図は、単体テストの作成結果を示しています。
[単体テストの作成] ダイアログ ボックスで選択したメソッドごとに、個別の単体テストが作成されます。 この例では、Credit メソッドおよび Debit メソッドの単体テストが生成されています。
生成された各単体テストには、空の変数と、プレースホルダーの Assert ステートメントが設定されています。 既定のプレースホルダーの Assert ステートメントは、通常、Assert.Inconclusive ステートメントです。
テストを意味のあるものにするために、変数を初期化し、このプレースホルダーを適切な Assert ステートメントに置き換える必要があります。 この例では、Credit の単体テストは生成時の状態のままにしていますが、Debit テスト メソッドの変数を初期化し、Assert ステートメントを置き換えています。
単体テストを初めて生成したときに、テスト プロジェクトがソリューション内に作成されます。
テストするクラスごとに、個別の単体テスト ファイルがテスト プロジェクト内に作成されます。 この例では、テストするメソッドの両方が同じクラスに属しています。 したがって、作成される単体テスト ファイルは BankAccountTest.cs の 1 つだけです。
テストを実行すると、テストの実行結果が [テスト結果] ウィンドウに表示されます。
単体テストを作成する
単体テストの作成には、2 つのフェーズがあります。
最初のフェーズでは、テストするコード内のメソッドごとに、スケルトン形式のテスト メソッドが格納された単体テスト ファイルを生成します。 スケルトンの各テスト メソッドは、空の変数と、プレースホルダーの Assert ステートメントが設定された状態で生成されます。
2 番目のフェーズでは、変数を初期化し、プレースホルダーの Assert ステートメントを適切なステートメントに置き換えます。
単体テストのスケルトンを生成する
[単体テストの生成] ダイアログ ボックスを使用して、テストするコード内の任意またはすべてのメソッドについて単体テストを生成します。
注意
通常は private、internal、friend などの属性でマークされたメソッドにはそのメソッドのクラスの外部からアクセスできませんが、Microsoft Visual Studio 2010 のツールを使用すると、単体テストがこれらのメソッドにアクセスできるようになります。 このしくみの詳細については、「プライベート メソッド、内部メソッド、およびフレンド メソッドの単体テスト」を参照してください。
単体テストのスケルトンを生成するには
Visual Studio コード エディター ウィンドウで、テストするコードを開きます。
(ASP.NET サービスの場合) ASP.NET Web サービスをテストする場合は、.aspx ページがプロジェクトに含まれていることを確認します。 .aspx ページのないプロジェクトで Web サービスの単体テストを作成すると、テストを実行したときにエラーが発生します。 詳細については、「ASP.NET Web サービスの単体テスト」を参照してください。
テストする名前空間、クラス、またはメソッドを右クリックし、[単体テストの作成] をクリックします。
[単体テストの生成] ダイアログ ボックスで、単体テスト ファイルに追加するすべてのメソッドのチェック ボックスをオンにします。
(省略可能) [設定] をクリックし、作成する単体テストの既定の設定を変更します。 以下は Visual Studio の設定であり、設定を再度変更するまでは、作成するすべての単体テストに適用されます。
[名前付けの設定]: 単体テストの生成時のテスト ファイル、テスト クラス、およびテスト メソッドの命名方法をカスタマイズするためのオプションです。
[既定ですべての結果不確定のテスト結果をマークする]: 各テスト メソッドでプレースホルダーの Assert として Assert.Inconclusive() ステートメントを使用するには、このチェック ボックスをオンにします。 プレースホルダーの Assert を除去するには、このチェック ボックスをオフにします。
[ドキュメント コメントを有効にする]: 各テスト メソッドにプレースホルダー コメントを用意するには、このチェック ボックスをオンにします。 プレースホルダー コメントを除去するには、このチェック ボックスをオフにします。
[InternalsVisibleTo 属性を有効にする]: Friend または Internal でマークされたメソッドがパブリック メソッドと同じように扱われるようにするには、このチェック ボックスをオンにします (推奨)。 プライベート アクセサーを使用してこれらのメソッドをテストするには、このチェック ボックスをオフにします。 プライベート アクセサーの詳細については、「プライベート メソッド、内部メソッド、およびフレンド メソッドの単体テスト」を参照してください。
(省略可能) ソース コードがないアセンブリ内のメソッドのテストを追加するには、[アセンブリの追加] をクリックします。 詳細については、「方法: ソース コードなしで単体テストを作成する」を参照してください。
[出力プロジェクト] ボックスで、次のいずれかの操作を実行します。
新しいテスト プロジェクトを作成するには、新しいプロジェクトの言語を選択し、[OK] をクリックします。 [新しいテスト プロジェクト] ダイアログ ボックスが表示されます。 プロジェクトの名前を入力するか、既定の名前を受け入れ、[作成] をクリックします。
[単体テストの作成] ダイアログ ボックスで選択したメソッドを既存のテスト プロジェクトの単体テスト ファイルに追加するには、ドロップダウン リストでそのプロジェクトをクリックし、[OK] をクリックします。
単体テストに検証を追加する
単体テスト ファイルの各テスト メソッドは、空の変数と、プレースホルダーの Assert ステートメントが設定された状態で生成されます。 このようなテストを実行することはできますが、実際のデータがないため、メソッドの動作が予想どおりであるかどうかを確認することはできません。 テストを意味のあるものにするために、変数を初期化して、プレースホルダーの Assert ステートメントをそのメソッドに適したものに置き換える必要があります。多くの場合、Assert.AreEqual ステートメントが使用されます。
単体テストに検証を追加するには
単体テスト ファイルを開き、変数を初期化する単体テストを探します。
単体テストで変数代入を探します。
新しく生成されたテストでは、変数代入が "TODO" ステートメントによってマークされており、代入をカスタマイズするよう示されています。 たとえば、編集する必要のある一般的な代入の例を次に示します。
string target.owner = null; // TODO: Initialize to an appropriate value
適切な値を各変数に代入します。 適切な変数の代入の例については、「チュートリアル : 単体テストの作成と実行」の「単体テストを実行およびカスタマイズする」を参照してください。
注意
データ ドリブン単体テストを作成することにより、さまざまな値セットを使用して単体テストを実行できます。 データ ドリブン単体テストは、データ ソース内の各行に対して繰り返し実行が行われる単体テストです。 詳細については、「方法: データ ドリブン単体テストを作成する」を参照してください。
単体テストの Assert ステートメントを探し、編集します。 使用できる Assert ステートメントの詳細については、「Assert クラスの使用」を参照してください。
(省略可能) Microsoft.VisualStudio.TestTools.UnitTesting 名前空間の [TestInitialize()] メソッドおよび [TestCleanup()] メソッドを使用して、単体テストのセットアップ コードとクリーンアップ コードを追加します。 単体テストの作成時に、単体テスト ファイルに "追加のテスト属性" セクションが追加されます。 このセクションを展開すると、コメント アウトされたメソッドが表示されます。これらのメソッドを使用して、初期化およびクリーンアップを含めることができます。
(省略可能) テスト カテゴリを作成する
テスト カテゴリを使用して自動テストを分類することにより、自動テストを管理できます。 詳細については、「テスト カテゴリの定義によるテストのグループ化」を参照してください。
注意
テスト リストよりも、テスト カテゴリを使用することをお勧めします。 テスト カテゴリを使用すると、テスト リストを保守する必要なしに、割り当てられたカテゴリに基づいてテストのグループを実行できます。
新しいテスト カテゴリを作成するには
[テスト ビュー] ウィンドウを開きます。
テストを選択します。
プロパティ ペインで、[テスト カテゴリ] をクリックし、右端の列にある省略記号 (...) をクリックします。
[テスト カテゴリ] ウィンドウの [新しいカテゴリの追加] ボックスに、新しいテスト カテゴリの名前を入力します。
[追加] をクリックしてから [OK] をクリックします。
新しいテスト カテゴリがテストに割り当てられ、プロパティを通じて他のテストに使用できるようになります。
(省略可能) テスト リストを作成する
テスト リストを使用すると、単体テストを論理グループにまとめることができます。 単体テストをテスト リストに追加することの主な利点は、複数の単体テスト ファイルからテストを実行できること、ビルドの一部としてテストを実行できること、およびテスト リストを使用してチェックイン ポリシーを適用できることです。 テスト リストの詳細については、「テスト リストの定義によるテストのグループ化」を参照してください。
注意
テスト リストよりも、テスト カテゴリを使用することをお勧めします。 テスト カテゴリを使用すると、テスト リストを保守する必要なしに、割り当てられたカテゴリに基づいてテストのグループを実行できます。
テスト リストを作成するには
[テスト] メニューの [新しいテスト リストの作成] をクリックします。
[新しいテスト リストの作成] ダイアログ ボックスで、リストの名前を入力し、説明を追加します。次に、テスト リストの配置場所を選択し、[OK] をクリックします。
[テスト リスト エディター] ウィンドウで [読み込まれたすべてのテスト] をクリックして、使用可能なすべてテストを表示します。
追加する各単体テストを、メイン ウィンドウからテスト リストにドラッグします。
単体テストを実行する
単体テストの作成後は、いつでも単体テストを実行できます。 ここでは単体テストを実行するための手順の 1 つを示しますが、ショートカット キーまたはコマンド ラインを使用するなどの別の方法の詳細については、「方法: Microsoft Visual Studio から自動テストを実行する」を参照してください。
単体テストを実行するには
[テスト] メニューの [ウィンドウ] をポイントし、[テスト ビュー] をクリックします。
(省略可能) コード カバレッジ情報を収集する場合は、次の操作を行います。
[テスト] メニューの [テストの設定の編集] をポイントし、現在のテストの実行のテスト設定をクリックします。
[テストの設定] ダイアログ ボックスの [データと診断] をクリックします。
[ロール] で、テストの実行に使用するロールを選択します。
[コード カバレッジ] チェック ボックスをオンにして、[構成] をクリックします。
コード カバレッジ情報を収集する各アイテムのチェック ボックスをオンにします。
[コード カバレッジの詳細] ダイアログ ボックスで、[OK] をクリックします。
[テストの設定] ダイアログ ボックスで、[適用] をクリックし、[閉じる] をクリックします。
[テスト ビュー] ウィンドウで、1 つまたは複数のテストを選択します。 複数のテストを選択するには、Ctrl キーを押しながら各テストをクリックします。
[テスト ビュー] ウィンドウのツール バーで、[選択範囲の実行] をクリックします。 テストが実行され、[テスト結果] ウィンドウが開きます。
(省略可能) テストの詳細を確認するには、[テスト結果] ウィンドウでそのテストを右クリックしてから、[テスト結果の詳細の表示] をクリックします。
(省略可能) 単体テスト ファイル内でエラーのある領域を特定するには、詳細ウィンドウの [エラーのスタック トレース] で、該当するエラーのリンクをクリックします。
テスト結果の詳細については、「テスト結果の確認」を参照してください。
(省略可能) コード カバレッジ データを表示する
コード カバレッジ情報の収集を選択した場合は、[コード カバレッジ] ウィンドウを開いて、テスト対象のコード内のすべてのメソッドのうち、単体テストで網羅されていたメソッドの割合を確認できます。 実行済みのテストのコード カバレッジを確認する方法、およびコード カバレッジ結果を管理する方法の詳細については、「コード カバレッジ データの概要」を参照してください。
単体テストのコード カバレッジを表示するには
[テスト結果] ウィンドウで、ツール バーの [コード カバレッジ結果の表示] をクリックします。 ボタンを表示するためにウィンドウを拡大することが必要になる場合があります。
[コード カバレッジの結果] ウィンドウが開きます。
このウィンドウには、メソッドがテストされた範囲が示されます。
参照
処理手順
方法: ロード テスト エディターを使用して、ロード テスト シナリオに Web パフォーマンス テスト、単体テスト、コード化された UI テストを追加する
方法: ロード テスト エディターを使用して、Web パフォーマンス テスト、単体テスト、コード化された UI テストをロード テスト シナリオから削除する