Page4アプリケーションをModel−View−Controllerと明確に分離することには、単体テスト(=ユニット・テスト)を行いやすくするという目的もある。Webフォームでは、すべての機能がページに集約されるので、単体テストを実施するにはページをインスタンス化するためにWebサーバを準備する必要があった。Object)であるので、インスタンス化も容易だ。テスト実施に当たってサーバの準備は必要ない。MVCの大きな特長の1つだ。MVCアプリケーションをテストする方法について、以下の内容を軸に解説する。Studioで単体テストを準備/実行する方法モック定義のためのMoqライブラリの用法データ・アクセスのコードを集約するリポジトリ・クラスの記述それではさっそく、始めよう。プロジェクトを作成する]をチェックするだけだ。別にインストールすることで、NUnitのようなテスト・フレームワークを利用することも可能だ。Edition(以降、VWD)では標準搭載されていないので、テスト・プロジェクトもVWDでは作成できない。プロジェクトを作成する]をチェックするだけでテスト用のプロジェクトも作成できる。以下では、まず「基本的な単体テストの手順を確認する」という意味で、第1回で作成したHello#Indexアクションをテストしてみよう。[1]テスト・クラスを追加するテスト・クラスを追加するには、ソリューション・エクスプローラからテスト・プロジェクトのControllersフォルダを右クリックし、コンテキスト・メニューから[追加]−[新しいテスト]を選択すればよい。[新しいテストの追加]ダイアログが表示されるので、以下の図の要領でテスト・クラスを作成しよう。[新しいテストの追加]ダイアログ[2]テスト・メソッドを作成する[OK]ボタンをクリックすると、テスト・クラスの骨組みが自動生成されるので、以下のようにテスト・メソッドを追加する。Hello#Indexアクションをテストするためのコード(上:HelloControllerTest.cs、下:HelloControllerTest.vb)テスト・メソッドであることを表すには、メソッド宣言にTestMethod属性(Microsoft.VisualStudio.TestTools.UnitTesting名前空間)を付与するだけでよい(太字)。アクション・メソッドの戻り値はActionResultオブジェクトであるので、結果を適切な型にキャストするのを忘れないこと。Assertクラスは、テストで得られた結果の正否をチェックするためのクラスで、例えばAreEqualメソッドを利用することで、第2引数(実際値)が第1引数(期待値)と等しいかどうかを判定できる。サンプルのチェック内容は、以下のとおりである。変数Messageが「こんにちは、世界!」に等しいかビュー名(result.ViewName)が空であるかビュー名はIndexではなく、空文字列である点に注意してほしい。名が指定されない場合、アクションと同名のビューが呼び出されるというのは、ViewResultクラスの内部的な挙動に過ぎず、ビュー名(ViewNameプロパティ)そのものはあくまで空となる。そのほか、Assertクラスで提供されるメソッドについては、「Microsoft.VisualStudio.TestTools.UnitTesting名前空間」も参照されたい。基本的なAssertクラスのほか、文字列やコレクションを判定するためのStringAssert/CollectionAssertクラスなども用意されている。[3]テスト・メソッドを実行するテストを実行するには、テスト・メソッドのブロック内で右クリックし、コンテキスト・メニューから[テストの実行]を選択すればよい。テストに成功すると、[テスト結果]ウィンドウに以下のような結果が表示される。[テスト結果]ウィンドウ(成功した場合)試しに、先ほどのテスト・メソッドを以下のように書き換えてみると、テストは失敗するはずだ。失敗するテスト・コード果たして、テストを再実行すると、今度は[テスト結果]ウィンドウにはテストが失敗したことを示す赤いアイコンが表示される。該当の行をクリックすると、メイン・ウィンドウからテスト失敗の理由も確認できる。7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。TranslatorはPowerPoint用のアドイン。