Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/07/14 14:00

 Visual Studioは2005の時から単体テスト機能を搭載するようになりました。Visual Studio 2008以降のバージョンでは一般的な開発者が利用するProfessional Editionにもこの機能が搭載され、ますます使いやすい環境が整ってきています。本稿(および本シリーズ)では主に単体テスト機能にフォーカスしますが、開発者の利用シーンをキーワードとしていくつかのシナリオを想定し、その時々の使い方を取り扱っていきます。

目次

 今回は単体テストの前準備と後片付けをシンプルに記述して再利用する方法を覚えましょう。

対象読者

  • .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の内容となっています。

リスト1 Class1TestのReadFileTest1メソッドの内容
[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度単体テストを実行して現在はテストが成功することを確認しておきましょう。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

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

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

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:Visual Studio 単体テスト機能大全
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5