SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Visual Studio 単体テスト機能大全

Visual Studio単体テストの前準備と後始末

Visual Studio 単体テスト機能大全(3)

  • X ポスト
  • このエントリーをはてなブックマークに追加

テスト前バッチ、テスト後バッチを利用して環境を初期化する

 ここまではC#またはVBのコードを利用してテスト前やテスト後のいくつかのタイミングでテストのために必要となる環境の準備や後片付けを行う手順を示してきました。さらにもう一歩進めて、Visual Studio単体テストフレームワークによるテストの開始前、終了後にバッチプログラムを利用して環境そのものの初期化やクリーンアップを行う方法を確認します。

操作手順

 まずは、初期化とクリーンアップに利用するバッチファイルを用意します。VS 2010のソリューションエクスプローラーで今回利用しているソリューションを確認すると「Solution Items」というフォルダが用意されています。「Solution Items」フォルダを右クリックして[追加]-[新しい項目]を選択します。新しい項目の追加ダイアログでは[全般]タブにある[テキスト ファイル]を選択し、名前は初期化用であることがわかるように任意で設定します。ただし、拡張子は図5のように.batとしてください。

図5 バッチファイルの追加
図5 バッチファイルの追加

 さらにもう一つクリーンアップ用のバッチファイルも追加します。これでファイルの準備は完了です。

 次に、このファイルをテストの初期化、クリーンアップとして利用するように設定します。ソリューションエクスプローラーの「Solution Items」フォルダ内にあるLocal.testsettingsをダブルクリックして開きます。このファイルはテストを実行する際の様々な設定を行うためのもので、この中の一つとして[セットアップおよび後処理用のスクリプト]というメニューがあります。これを開き、図6にあるように[セットアップスクリプト]と[後処理用スクリプト]に先ほど作成したそれぞれのバッチファイルを設定します。最後に[適用]ボタンをクリックして設定終了です。

図6 セットアップおよび後処理用のスクリプトの設定
図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のようになりました。

リスト5 qtsetup.batで定義された環境変数
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単体テストフレームワークの機能を利用して、簡単に初期化や後処理のコードを再利用する仕組みを確認してきました。より便利に様々なものを自動的にテストできる仕組みを整えられるようこれらの機能を利用して工夫してみてください。

 次回は外部に存在するデータを利用しながらテストを行う方法についてみていきたいと思います。どうぞお楽しみに。

参考文献

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Visual Studio 単体テスト機能大全連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト りばてぃ(リバティ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6021 2011/07/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング