テスト前バッチ、テスト後バッチを利用して環境を初期化する
ここまではC#またはVBのコードを利用してテスト前やテスト後のいくつかのタイミングでテストのために必要となる環境の準備や後片付けを行う手順を示してきました。さらにもう一歩進めて、Visual Studio単体テストフレームワークによるテストの開始前、終了後にバッチプログラムを利用して環境そのものの初期化やクリーンアップを行う方法を確認します。
操作手順
まずは、初期化とクリーンアップに利用するバッチファイルを用意します。VS 2010のソリューションエクスプローラーで今回利用しているソリューションを確認すると「Solution Items」というフォルダが用意されています。「Solution Items」フォルダを右クリックして[追加]-[新しい項目]を選択します。新しい項目の追加ダイアログでは[全般]タブにある[テキスト ファイル]を選択し、名前は初期化用であることがわかるように任意で設定します。ただし、拡張子は図5のように.batとしてください。
さらにもう一つクリーンアップ用のバッチファイルも追加します。これでファイルの準備は完了です。
次に、このファイルをテストの初期化、クリーンアップとして利用するように設定します。ソリューションエクスプローラーの「Solution Items」フォルダ内にあるLocal.testsettingsをダブルクリックして開きます。このファイルはテストを実行する際の様々な設定を行うためのもので、この中の一つとして[セットアップおよび後処理用のスクリプト]というメニューがあります。これを開き、図6にあるように[セットアップスクリプト]と[後処理用スクリプト]に先ほど作成したそれぞれのバッチファイルを設定します。最後に[適用]ボタンをクリックして設定終了です。
これで、作成したファイルをすべてのテストの開始前と全てのテストの終了後に利用する準備が整りました。この設定を利用して、例えばSQL Serverデータベースファイルを用意しておいてテストのたびにアタッチとデタッチを行うようにして毎回同じデータでテストを始められるようにしたり、IIS(Internet Information Services)やASP.NET開発サーバーにアセンブリを配置してからテストを行い、終了したら配置内容を削除したりといった主に環境の準備に利用することができます。
なお、今回はこれらの具体的な記述方法については割愛します。
補足や注意事項
以上でVisual Studioの単体テストフレームワークに用意されている初期化バッチ、後処理バッチを利用する方法を見てきましたが、何点か補足と注意事項を確認しておきましょう。
まず、[セットアップおよび後処理用のスクリプト]には、Windowsバッチファイルまたはバッチ処理のみを指定することができます。例えば、C#やVBで作成したコンソールアプリケーションやVBスクリプトなどは直接登録することができません。これらを利用したい場合には、[セットアップおよび後処理用のスクリプト]にはバッチファイルを登録し、登録したバッチファイルの中から間接的に呼び出すようにします。
次に登録するバッチファイルからはいくつかの追加の環境変数を利用することができます。利用できる環境変数は実際に定義されているファイルを見ることで確認することができます。
テスト後にエクスプローラーで「ソリューションファイルのあるフォルダ」-「TestResults」フォルダ-「最新の日付のフォルダ」を開きます。すると、qtsetup.batとqtcleanup.batが確認できます。例えば、qtsetup.batをメモ帳などで開くと中に追加で利用可能な環境変数が定義されています。著者の環境にて実際にqtsetup.batを確認してみるとリスト5のようになりました。
REM **************************************************************************** REM * Microsoft Visual Studio によって生成されました REM * Copyright (c) Microsoft Corporation. All rights reserved. REM * REM **************************************************************************** set DeploymentDirectory=D:\CodeZine-Test-03\TestResults\libaty_WINDOWS7 2011-04-17 15_50_23\Out set DataCollectionEnvironmentContext=Microsoft.VisualStudio.TestTools.Execution.DataCollectionEnvironmentContext set TestRunDirectory=D:\CodeZine-Test-03\TestResults\libaty_WINDOWS7 2011-04-17 15_50_23 set TestRunResultsDirectory=D:\CodeZine-Test-03\TestResults\libaty_WINDOWS7 2011-04-17 15_50_23\In\WINDOWS7 set ResultsDirectory=D:\CodeZine-Test-03\TestResults\libaty_WINDOWS7 2011-04-17 15_50_23\In set TotalAgents=1 set AgentWeighting=100 set AgentLoadDistributor=Microsoft.VisualStudio.TestTools.Execution.AgentLoadDistributor set AgentId=1 set TestDir=D:\CodeZine-Test-03\TestResults\libaty_WINDOWS7 2011-04-17 15_50_23 set TestLogsDir=D:\CodeZine-Test-03\TestResults\libaty_WINDOWS7 2011-04-17 15_50_23\In\WINDOWS7 set AgentName=WINDOWS7 set ControllerName=WINDOWS7 set TestDeploymentDir=D:\CodeZine-Test-03\TestResults\libaty_WINDOWS7 2011-04-17 15_50_23\Out //以下省略
初期化、クリーンアップのバッチファイルの主な役割が環境の構築と後始末であるため、これらの環境変数は少なからず利用する必要が出てくるはずです。
最後に、[セットアップおよび後処理用のスクリプト]に設定するバッチファイル(およびその中での全ての処理)は処理が失敗しないように細心の注意を払って作成しておく必要があります。これは、いずれかのバッチファイルで失敗が発生するとそのままテストが中断されてしまうためです。初期化の際にはむしろテストが開始されない方が好都合なこともありますが、クリーンアップでは行いたい処理自体ができなくてもバッチファイルそのものは成功して終了するように作成してください。
まとめ
今回は、テストの前準備、後処理を様々なタイミングで制御するVisual Studio単体テストフレームワークの機能を利用して、簡単に初期化や後処理のコードを再利用する仕組みを確認してきました。より便利に様々なものを自動的にテストできる仕組みを整えられるようこれらの機能を利用して工夫してみてください。
次回は外部に存在するデータを利用しながらテストを行う方法についてみていきたいと思います。どうぞお楽しみに。