今回は単体テストの前準備と後片付けをシンプルに記述して再利用する方法を覚えましょう。
対象読者
- .NET Frameworkを利用した開発プロジェクトに携わっている方
- Visual Studioの単体テスト機能に興味がある方
必要な環境と準備
本稿で解説する内容を実際に試す場合には以下のいずれかのソフトウェアが必要になります。
- Visual Studio 2010 Professional Edition
- Visual Studio 2010 Premium Edition
- Visual Studio 2010 Ultimate Edition
まだ環境がなく、製品版も所持していない場合には、Visual Studio 2010 Professional Editionの評価版をダウンロードして試すことができます。Premium Editionの評価版は用意されていませんが、これらを包含したUltimate Editionの評価版はダウンロードすることができます。それぞれのダウンロードページにはダウンロード手順やインストール手順についての記載がありますので内容を確認のうえ、作業を行ってください。
また、既にService Pack 1が提供されているので、こちらも適用しておくことをお勧めします。Service Pack 1のインストーラーもダウンロードして入手することができます。
次に本稿で利用するソリューションとプロジェクトです。実際に作業を行う場合には、本稿に付属の「事前のサンプルファイル(CodeZine-Test-03_before.zip)」をダウンロードし、任意の場所に解凍しておいてください。なお、本稿の内容をすべて実施したものを「作業後のサンプルファイル(CodeZine-Test-03_after.zip)」として用意してあります。作業結果を確認したい場合にはこちらのファイルを解凍したものをご覧ください。
テストの初期化/クリーンアップ処理を利用する
単体テストを実施するには、場合によりテスト対象のメソッドを呼び出すための環境を整える前準備が必要になったり、次も同じくテストを実施できるようにする後始末が必要になったりすることがあります。単体テストメソッドが少ないうちはテストメソッドごとに書くこともあるかもしれませんが、量が多くなればなるほどその作業が無駄になってしまいます。Visual Studioの単体テストフレームワークにはテストの前処理や後処理を一か所にまとめて記述しておくことで簡単に再利用が行える仕組みが用意されています。ここではその仕組みを利用したテストの初期化、クリーンアップ処理を記述する方法を確認します。
状況の確認
これから作業を行うことになる単体テストの状況を確認しておきましょう。本稿付属のサンプル(CodeZine-Test-03_before.zip)をダウンロードし、任意の場所に解凍後、フォルダ内に含まれるCodeZine-Test-03.slnをVS 2010で開いてください。このソリューションには、あらかじめテスト対象となるClass1.csを含むClassLibrary1プロジェクトと、単体テストを記述したClass1Test.csファイルを含むTestProject1プロジェクトが登録されています。
Class1Test.csファイルを開き、ReadFileTest1メソッドを確認すると次のリスト1の内容となっています。
[TestMethod()] public void ReadFileTest1() { //テストの準備 string testPath = this.TestContext.DeploymentDirectory; string writePath = Path.Combine(testPath, "readtest1.txt"); File.WriteAllText(writePath, "あいうえお\nかきくけこ\nさしすせそ", Encoding.Default); //テストの実行 Class1 target = new Class1(); string[] expected = new string[] { "あいうえお", "かきくけこ", "さしすせそ" }; string filePath = writePath; string[] actual; actual = target.ReadFile(filePath); Assert.AreEqual(expected.Length, actual.Length); Assert.AreEqual(expected[0], actual[0]); Assert.AreEqual(expected[1], actual[1]); Assert.AreEqual(expected[2], actual[2]); //テストの後片付け File.Delete(writePath); }
ReadFileTest1テストメソッドでは、Class1のReadFileメソッドをテストするように作成されています。ReadFileメソッドは指定されたパスにあるテキストファイルを行ごとに分割して文字列配列を返却するメソッドです。このため、テストを行う前に読み込み対象となるファイルを作成しています。テスト実施後はテストに利用したファイルを削除して後処理を完了するという内容です。Class1Test.csには他にReadFileTest2というメソッドも用意されています。こちらを確認していただくとリスト1と同様の前処理、後処理が行われていることを確認できます。
ここではこれらの処理をVisual Studioの単体テストフレームワークが提供する前処理、後処理の機能に置き換えていきます。ですが、編集前に1度単体テストを実行して現在はテストが成功することを確認しておきましょう。