単体テストの概要
更新 : 2007 年 11 月
単体テストは、Visual C# または Visual Basic で記述されたプログラム テスト、または Visual C++ で記述され、/clr:safe でコンパイルされたプログラム テストです。
メモ : |
---|
C++ 実行コードで単体テストを使用する方法および C++ で記述された単体テストを使用する方法の詳細については、「ユニット テストと C++」を参照してください。 |
単体テストでは、クラスのメソッドを直接呼び出し、適切なパラメータを渡すことによって、他のソース コードを実行できます。そのうえで、Assert ステートメントを指定した場合は、予測値に対して生成された値をテストできます。単体テスト メソッドは、ソース コード ファイルに格納されているテスト クラスに存在します。
単体テストは、テストの初期ソース コードを作成するコード生成機能を使用して作成したり、完全に手動で作成したりできます。いずれの方法でも、テスト クラスおよびすべてのテスト メソッドは、プログラム属性によって識別されます。
各テスト クラスには、[TestClass()] 属性でマークが付けられます。各単体テストは、[TestMethod()] 属性でマークが付けられたテスト メソッドです。これらの属性は、単体テストが生成されるときに自動的に割り当てられます。単体テストを手動でコード化する場合、クラスとメソッドの属性は自分で追加する必要があります。詳細については、「ユニット テストの構造」を参照してください。
単体テストの生成
単体テストは、Visual Studio ツール ウィンドウで表示されるダイアログ ボックスを使用して生成できます。各単体テストは、C# メソッド、Visual Basic メソッド、または Visual C++ メソッドとして作成されます。コードおよび属性は、同じ言語のテスト プロジェクトのソース ファイルに存在します。新しいテストは、テストする特定のコードを対象とします。個々のメソッドに対して、単一の単体テストを生成したり、選択するメソッドに対して複数のテストを作成したり、またはクラスや名前空間のすべてのメソッドに対して複数のテストを作成したりできます。
単体テストは、現在のプロジェクトのソース コードから生成できます。また、ファイル システム内のアセンブリから単体テストを生成することも可能です。この方法はソース コードが使用できない場合に役立ちます。
生成されたばかりのテスト コードはコンパイルできますが、有用なテスト結果を生成するには、編集する必要があります。たとえば、変数の割り当てや Assert ステートメントのカスタマイズを行います。生成された単体テストには、編集が必要なコード行を示す TODO ステートメントが含まれています。
メモ : |
---|
Team System テスト ツール は、単体テストを生成するときに名前付け規則を使用します。テスト ファイルの名前は、たとえば "Class1Test.cs" のように、"Test" という単語とテストするコードが含まれているファイル名を連結させて付けられます。テスト クラスの名前とテスト メソッドの名前は、既定値を使用して生成されます。これらの既定値は、[単体テストの作成] ダイアログ ボックスの [設定] をクリックすると表示される [テスト生成の設定] ダイアログ ボックスで変更することもできます。 |
詳細については、「方法 : 単体テストを生成する」を参照してください。
単体テストの作成
単体テストは、生成機能を使用しないで手動で作成することもできます。手動で作成する最適な方法は、単体テストをテスト プロジェクトに追加することです。これにより、コードは含まれないものの、[TestMethod()] 属性が適用されたスタブ テスト メソッドが作成されます。テストを完成させるには、ソリューションのテスト プロジェクトに存在するソース ファイルでテストを編集する必要があります。詳細については、「方法 : 単体テストを編集する」および「ユニット テストの構造」を参照してください。
単体テスト フレームワーク
単体テスト フレームワークには、単体テストを柔軟に記述できるようにする、さまざまな追加の Assert クラスおよびその他のクラスが用意されています。詳細については、Microsoft.VisualStudio.TestTools.UnitTesting にある「単体テスト フレームワーク」の名前空間および型に関する説明を参照してください。
テスト クラスの継承
テスト クラスは、TestClass 属性でマークされたテスト メソッドです。テスト クラスでは、他のクラスのメンバを継承できるようになりました。したがって、基本テスト クラスで再利用可能なテストを作成できます。派生テスト クラスでは、基本テスト クラスのテストを継承できます。この機能により、テスト コードの重複がなくなり、開発者はより柔軟に実行コードの単体テストを実行できます。
テスト クラスでは、別のアセンブリのクラスは継承できません。この制限は次の方法で回避できます。
基本テスト クラスをソース コード ファイルに定義し、そのファイルを Project A に追加します。
同じソース コード ファイルを Project B という別のプロジェクトに追加します。これを行うには、ソリューション エクスプローラで [Project B] を右クリックし、[追加] をクリックします。次に、[既存の項目] をクリックし、[既存項目の追加] ダイアログ ボックスでファイルを選択します。
Project B は別のアセンブリに組み込まれますが、このプロジェクトには基本テスト クラスが含まれています。Project B の他のテスト クラスでは、基本テスト クラスを継承できます。
継承の例
実行コードには 2 つの実装があります。1 つは Microsoft SQL Server バックエンドを使用し、もう 1 つは Oracle を使用します。いずれの実装も同じように機能する必要があります。標準のテスト コードを含む抽象テスト クラス DBTestSuite を作成できます。次に、いずれも DBTestSuite から派生したクラス SQLTestSuite と OracleTestSuite を作成できます。これらの派生クラスに実装する必要があるのは、抽象メソッドの Connect だけです。2 つのテスト クラスのうち、一方は Microsoft SQL Server に接続し、もう一方は Oracle に接続します。
さらに、SQLTestSuite の派生テスト クラス EmptySQLTestSuite を作成し、空の Microsoft SQL Server データベースをテストすることもできます。パフォーマンスを高めるために、空のデータベースのテストには意味のないテスト メソッドをオーバーライドできます。
テスト クラスの継承を使用すると、[テスト ビュー] ウィンドウおよびテスト リスト エディタには基本クラスと子クラスの両方のテスト メソッドが表示されます。どのクラスのテストであるかを確認するには、テスト リスト エディタの [クラス名] 列または [完全クラス名] 列を表示します。詳細については、「方法 : テスト ビューをカスタマイズする」を参照してください。
プライベート メソッドのテスト
単体テストを使用すると、パブリック メソッドだけでなく、プライベート メソッドもテストできます。パブリック メソッドの場合と同様、プライベート メソッドの単体テストは、テストするコードからテストを生成する際に自動的に作成されます。詳細については、「方法 : プライベート メソッドをテストする」および「プライベート アクセサの使用」を参照してください。
特殊な単体テスト
次の表に他の種類の単体テストを示します。
単体テストの種類 |
説明 |
---|---|
データ ドリブン単体テスト |
データ ドリブン テストは、データ ソースの各行に対して繰り返し呼び出されるように設定された単体テストです。各行のデータは、テストの連続したそれぞれの実行で入力データとして使用できます。詳細については、「データ ドリブン単体テストの概要」を参照してください。 |
ASP.NET単体テスト |
ASP.NET 単体テストでは、ページ要求に応答した ASP.NET アプリケーションのコードを実行します。ASP.NET 単体テストは、テスト対象の ASP.NET アプリケーション内で実行されます。詳細については、「ASP.NET 単体テストの概要」を参照してください。 |
スマート デバイスの単体テスト |
スマート デバイスの単体テストは、スマート デバイスまたはエミュレータ上のスマート デバイス ホスト プロセスで実行されます。詳細については、「スマート デバイス単体テストの概要」を参照してください。 |
Web サービス単体テスト |
Web サービス単体テストの詳細については、「Web サービスのテスト」を参照してください。 |