次に、ソリューションエクスプローラーでWebアプリケーションプロジェクト(付属サンプルではWebApplication1)を選択し、コンテキストメニューから[プロパティ]を表示します。左側の一覧から[Web]を選択し、右側では図3のように[サーバー]グループ内の[ポートを指定する]ラジオボタンにチェックを入れます。ポート番号は、リスト7などでUrlToTest属性に指定されていたポート番号と同様なので、そのままにします。
最後にVisual Studioの設定を変更します。Visual Studioの[ツール]から[オプション]を選択します。左側の項目から[テストツール]-[テストの実行]を選択します。右側では[Webアプリケーションルートディレクトリ]のテキストボックスに「D:\CodeZine-Test-05」を設定して[OK]ボタンをクリックします。なお、ここで設定したパスはリスト5のAspNetDevelopmentServerHost属性に設定されたパスのうち、リスト7で%PathToWebRoot%という文字列で置き換えた部分となります。
以上で設定は完了です。再度、WriteFileTest単体テストを実行してテストが成功することを確認してください。
補足や注意事項
ここまでで、ASP.NET環境を利用した単体テストの作成・実行を見てきました。何点か補足と注意事項を確認しておきましょう。
まず、特に気にすることなくASP.NET環境が必要な単体テストを作成して実行できました。この最大のポイントとなっているのが、リスト5などで付与されていたHostType属性、AspNetDevelopmentServerHost属性、UrlToTest属性です。
HostType属性はテストを実行するための環境(ホスト)を定義するためのものです。HostTypeにはライブラリを実行する場合の既定のホストと、ASP.NET環境を利用するためのASP.NETが用意されています。定義済みメソッドから単体テストを作成する場合は、Visual Studioが自動的に判断して、ASP.NETが必要な場合にはホストを変更するためにHostType属性が付与されます。
AspNetDevelopmentServerHost属性はテスト実行時にASP.NET開発サーバーを立ち上げる際、読み込み元となるWebアプリケーションのフォルダパスを設定しています。つまり、ASP.NET Webアプリケーションをデバッグ実行する場合と同様に、単体テスト時にもWebアプリケーションを起動できるようになるというわけです。
UrlToTest属性は、テスト実行時に接続するWebアプリケーションパスです。リクエストURLやその際に実行されるページインスタンスなどが特定の要件を満たす必要がある場合にはそれに合わせて正確に設定します。そうでない場合には、テスト作成時に設定されたものをそのまま利用して問題ありません。
これら3つを利用することで、今回の場合はWriteFileTestメソッドが動作する際に、WebApplication1というWebアプリケーション環境が起動され、その環境を利用して単体テストが実行されるという動きを行うことで、単体テストを実行して成功させることができました。
まとめ
今回は、外部の環境に依存しながら動作する単体テストとして、データベース操作を伴うものとASP.NET環境を必要とするものを取り上げました。第3回で紹介した方法と組み合わせると、さまざまな応用方法を考えることができます。ぜひいろいろと試してみてください。次回は今回紹介しきれなかったWindowsアプリケーションの単体テストについて取り上げる予定です。