もう1つの操作手順
ここまでに説明してきた内容に従うことでデータドリブンテストを行うことが可能です。前述した方法ではアプリケーション構成ファイルを利用しているため、設定の一元管理や複数メソッドでの使いまわしを行うような場合には非常に便利な反面、すばやく簡単にテストを行いたい場合にはやや手順が煩雑でもあります。そこで、ここではアプリケーション構成ファイルを利用しない方法でのデータドリブンテストの設定手順を紹介していきます。
ここまでの手順では、以下のように設定を行ってきました。
- (準備)テスト対象メソッドの確認
- 通常の単体テストメソッドの作成
- テストプロジェクトのアプリケーション構成ファイルの編集
- データドリブンテスト用のテストデータの作成
- データドリブンテストを行うための単体テストの編集
ここで紹介する手順では、先の手順1, 2, 4を実施するところは同様です。手順3については実施しません。この状態になったところで、次に手順5(リスト5の内容)で行ったデータドリブンテストを行うための単体テストの編集の部分をリスト6に示すように変更します。
/// <summary> ///Calculate のテスト ///</summary> [TestMethod()] [DeploymentItem("TestProject1\\data.xls")] [DataSource("System.Data.Odbc", "Dsn=Excel Files;dbq=data.xls;defaultdir=.;driverid=790;maxbuffersize=2048;pagetimeout=5", "Sheet1$", DataAccessMethod.Sequential)] public void CalculateTest() { ...リスト5と同様のため中略... }
リスト5との違いはメソッドに設定されたDataSource属性の部分のみです。リスト5ではアプリケーション構成ファイルに定義したデータソース名を指定していましたが、リスト6では接続文字列など全ての情報を属性内で定義しています。各単体テストでこのように接続文字列の全てを設定してしまうことで、アプリケーション構成ファイルを利用しなくてもデータドリブンテストを行うことが可能です。なお、この状態でテストを実行すれば、先ほどと同様の結果を得ることができます。
アプリケーション構成ファイルなしの場合、データソース設定の一元管理を行うことは難しくなりますが、データドリブンテストを行うメソッドの属性としてデータソースに関する全ての設定が記述されているため、データソースと単体テストの組み合わせの見通しは非常によくなります。それぞれ一長一短なので、用途に合わせて使い分けてみてください。
余談ですが、本稿に付属の作業後のサンプルファイルでは、上記リスト6の内容についてはリスト5を含むテストプロジェクトとは別のテストプロジェクトを作成して設定しています。実際に動作すると、確実にアプリケーション構成ファイルなしで動作しているところを確認していただくことができます。
データドリブンテストにおける補足や注意事項
以上でデータドリブンテストを作成して、各種の設定を行い実行するところまでを見てきましたが、何点か補足と注意事項を確認しておきます。
(1)テスト結果の詳細の表示内容の違いについて
図4にあるテスト結果ウィンドウを表示している際の続きの作業を補足しておきます。図4のようにテスト結果が表示されている状態で、結果行をダブルクリック(またはテスト結果のコンテキストメニューから[テスト結果の詳細の表示])してテスト結果の詳細を表示すると、図5のように今までの結果とは多少異なる内容が表示されています。
ここで下側の[データドリブンテスト結果]という部分が大事なポイントとなります。今回は表1で5行分のデータを定義したため、同じ単体テストが5回繰り返され、それぞれ異なるデータを利用してテストが行われたことを示しています。今回は全ての行でテストが成功しているためにこのような表示となっていますが、例えば1行でも失敗すると図6のような表示結果となります。
図6では行番号1(つまり2行目)のデータを使ったテストにおいて失敗したことが記録されています。データドリブンテストは境界値や限界値、様々なパターンに基づくテストを行う際に非常に有効な手段ですが、その中でもどこで失敗したのかが一目瞭然となるというわけです。なお、このような表示がされる場合、図4のようないつものテスト結果表示でも失敗を表す状態で表示されるようになります。
(2)アプリケーション構成ファイルのデータソースの設定について
次にアプリケーション構成ファイルに設定したデータソース等の設定についてです。今回はExcel 2003までの形式で保存されたExcelファイルを利用しましたが、AccessのmdbファイルやCSVなどのテキストファイル、SQL Serverなどのデータベースなど様々なものをデータドリブンテストのデータソースとして利用することができます。要は、connectionStrings要素に設定できる接続文字列で接続可能なものであれば、すべて利用可能であるということです。その時々で利用しやすいものをデータソースに利用してテストを行うように工夫してみてください。
(3)データファイル作成時の注意事項について
データソースにExcelやCSVファイルを利用する際にはその作成方法にも注意点があります。これらのファイル形式を利用する場合には、必ずヘッダ行も一緒に定義する必要があります。例えば、リスト5やリスト6で読み込んだ外部データのうち各行の x という列や operation という列を利用するように書いています。これらはExcelやCSVファイルの先頭行に定義された文字列とマッチするように記述しています。VSのデータドリブンテストでこれらのファイルを利用する場合は1行目のデータをヘッダ行とみなして処理を行っているため、このような記述が必要となります。
(4)DeploymentItem属性で設定するパスについて
データドリブンテストと直接は関係しませんが、今回利用したものの注意事項ということで補足しておきます。DeploymentItem属性はその単体テストメソッドを実行する際に追加で必要となるファイルを指定するために利用します。DeploymentItem属性でのパス文字列はVisual Studioのソリューションファイルが格納されているフォルダからの相対パスを記述しています。通常はこのように記述しますが、出力ディレクトリにコピーされているファイルはファイル名だけで指定することが可能であったり、%windir%などの環境変数を利用してパスの解決を行うことも可能になっています。
(5)ODBCデータソースの利用について
これもデータドリブンテストと直接は関係しませんが、今回利用したものの注意事項ということで補足しておきます。今回のリスト3などでは、接続文字列内でDSNとしてExcel Filesというものを利用しています。これはWindows 7などのOSでは、予めODBCのユーザーデータソースとして定義されているものなので、それを介してExcelファイルを読み込むような設定を行っています。もしもDSN=Excel Filesというユーザーデータソースが定義されていない場合には、別途新規に作成しておく必要があります。
また、64bit OSを利用している場合には、定義済みのDSN=Excel Filesを利用してもうまくいきません。これはDSN=Excel Filesが64bit用に定義されているのに対し、VSの単体テストは32bitで動作しようとしているためです。この問題を解決するためには「C:\Windows\SysWOW64\odbcad32.exe」ツールを利用して32bit用のユーザーデータソースを定義することで解決することができます。ODBCの設定ツールは通常通りの起動方法である[スタート]-[コントロールパネル]-[管理ツール]-[データソース(ODBC)]という順(コントロールパネルでクラシック表示の場合のクリック順)で辿って起動したものと、64bit OSで32bit用ODBCツールを指定して起動した場合で操作方法に差異はありません。このため起動後は従来通りに設定を行ってください。
まとめ
データドリブンテストは、記述するテスト数を最小に抑え、かつ網羅的にテストを行うためにはなくてはならない機能です。やや関連する注意事項が多い印象はぬぐえませんが、ぜひ効率のよい使い方をマスターして効率よくテストを行っていくことに役立ててみてください。