Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。MVCにおける単体テストと単体テストTips今回は以下の順番でテストを実施します。今回は最初に挙動を決めるであろうURLルーティングからテストを実施していきます。個別のテストに入る前にテストの実行方法について簡単にご紹介します。テストはメニューまたはツールバーから実行できます。メニューから実行する場合は以下の手順で実施できます。[テスト]-[実行]または[デバッグ]-[現在のコンテキストのテスト]または[ソリューションのすべてのテスト]を選択(図1)。メニューからテストを実行ツールバーから実行する場合は実行したいモードのテスト形式のボタンをクリックするだけです(図2)。ツールバーからテストを実行なお、テストを記載する際のポイントとしてテストコードの正確性を確認する作業があります。テストコードを記述した後、理想値にあえて異なる値を設定し、テストを失敗させます。その後理想値と実行結果が一致するか確認することで、テストの正確性が得られます(図3~4)。テスト成功時それでは個別のテストを確認していきましょう。URLルーティングの単体テストURLルーティングのルーティングルールはGlobal.asaxファイル内のRegisterRoutesメソッドに記載します。MVCプロジェクト作成時は以下の2つの機能が実装されています。XXXX.axdと記載されているルートが無効化されているかを確認するテストや、CodeZineControllerクラスのarticleアクションメソッドに適当な記事番号を割り振っている場合、CodeZine/article/5754などのリクエストを正しく処理できるかを確認するテストを記述することになります。実際のURLルーティングのテストコードは以下のとおりです。actual.Values["id"]);}1と2に分けていますが、基本的な部分は両方変わりありません。それぞれ、最初にモックを作成しています。URLルーティングの単体テストのキモはルートを取得するGetRouteDataメソッドのパラメータであるHttpContextBaseクラスのモックを作成する点です。HTTPの情報を扱うオブジェクトを生成する場合、都度アプリケーションサーバーを起動し、実際にアプリケーションを実行しなければ生成できないHttpContextBaseオブジェクトを生成するのは手間ばかり増えテストの本質から離れてしまいます。Moqを使うことで簡単にメソッドなどのインターフェースのみを実装したダミーのオブジェクトとなるモックを作成できます。モック作成後、GetRouteDataメソッドのパラメータにモックを指定することでモックに指定したルートが取得できます。最後にアサートでRouteDataオブジェクトが取得できているかをIsNotNullメソッドで確認し、各ルートが無効化されているか、理想値と同一か確認するだけです。続いてリポジトリクラスの単体テストを見てみましょう。NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Technologies。執筆コミュニティ「WINGSプロジェクト」代表。