SHOEISHA iD

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

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

Visual Studio 2005 Team Edition for Software Developersを使ってみよう

システム品質向上のワザ -VSTDの単体テスト機能を極める-

Visual Studio 2005 Team Edition for Software Developersを使ってみよう(1)


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

Visual Studio 2005 Team Systemのエディションのうち、Visual Studio 2005 Team Edition for Software Developers(VSTD)及びVisual Studio 2005 Team Edition for Software Testers(VSTT)に用意されている単体テスト機能について操作方法や効果的な使い方を解説します。これらの機能を実際に使用するイメージを得ることを目標にしています。

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

はじめに

 Visual Studio 2005 Team System(以下、VSTS)には製品の品質を向上させる上で非常に有効なさまざまなテスト自動化の機能が付属しています。それらの機能の概要は「Visual Studio 2005 Team Systemを使ってみよう-第3回 単体テストからパフォーマンス分析まで、VSTDでシステム開発を自動化しよう」で述べましたが、具体的な操作や実際に使用するうえでの注意点、さらにVSTSの連携機能を活かした使い方までは触れていませんでした。

 そこで今回はテスト自動化の機能のうち、Visual Studio 2005 Team Edition for Software DevelopersおよびVisual Studio 2005 Team Edition for Software Testersに用意されている単体テスト機能について、操作方法と効果的な使い方を紹介します。

対象読者

  • .NET Frameworkを利用した開発プロジェクトに携わっている人
  • Visual Studio 2005 Team Systemに興味がある人
  • 単体テストに興味がある人

必要な環境と準備

  • Visual Studio 2005 Team Edition for Software DevelopersまたはVisual Studio 2005 Team Edition for Software Testersがインストールされていること(一部の内容にはVSTTの機能が必要な部分があります)。

とりあえず単体テストを作ってみよう

 単体テストはテスト対象のメソッドを呼び出し、予測値と同じ値が返ってくるかどうかを判断するテストです。VSTSの単体テストにはいくつかの機能がありますが、まずは具体的な使用方法と注意点について見ていきましょう。

 VSTSの単体テストを使用する際、始めに行うことはテストプロジェクトを追加することです。VSTSでは単体テストはすべて専用のプロジェクト内に記述するのでテスト対象のソースコードに手を加える必要はありません。テストプロジェクトは通常のプロジェクトを追加するようにソリューションエクスプローラから追加できます。

 このテストプロジェクト内に単体テストを記述していくわけですが、すべてを自分自身で実装するわけではなく、テストコードの雛形部分は自動生成することができます。雛形を作成したい場合は、まず単体テスト対象としたいソースコード上で右クリックし、「テストの生成」を選択します(図1)。立ち上がってきたウィンドウの任意のテスト対象を選択することでテストクラスやテストの雛形を自動生成できます(図2)。

図1 単体テスト作成画面
図1 単体テスト作成画面
図2 単体テスト作成画面
図2 単体テスト作成画面

 Subtractionという引数同士の引き算を行うだけの単純なメソッドのテストコードを自動生成すると次のような雛形が出来上がります。

単体テストの雛形コード
///<summary>
///Subtraction (int, int) のテスト
///</summary>
[TestMethod()]
public void SubtractionTest()
{
  Calculater target = new Calculater();

  int i = 0; // TODO: 適切な値に初期化してください

  int j = 0; // TODO: 適切な値に初期化してください

  int expected = 0;
  int actual;

  actual = target.Subtraction(i, j);

  Assert.AreEqual(expected, 
           actual, 
           "CodeZineSample_UnitTest_VSTD.Calculater.Subtraction は
予期する値を返しませんでした。");
  Assert.Inconclusive("このテストメソッドの正確性を確認します。");
}

 自動生成されたコードには[TestClass][TestMethod]といった属性によってテスト専用のコードであることが明記されています。この属性を持つことで、テストマネージャといったVSの画面上から任意のテストを実行できるようになります。

 雛形の中身ですが、テスト対象のコードが呼び出され、戻り値をAssertクラスのメソッドの第2引数として使用していることがわかります。Assertクラスのメソッドは大抵、第1引数に期待値を、第2引数に実際の戻り値を指定し、第1引数と第2引数が一致するかどうかを判断します。第3引数も指定することができ、第1引数と第2引数が一致しなかった場合のエラーメッセージを指定します。また、対象のメソッドでの例外を検証したい場合は属性に[ExpectedException]を使用することで例外の検証ができます。

 最後の1行にAssert.Inconclusive(“このテストメソッドの正確性を確認します”)というコードがありますが、このコードはテストが未実装であることを示すコードで、このコードがあるとテストは成功しません。テストの実装が完了した場合はこのコードを必ず削除してください。

 また、以前の記事でも述べましたが、プロジェクトを分けてしまったことにより、privateやinternal(Visual BasicではPrivateやFriend)アクセス修飾子が付与されたメソッドへのアクセスができないかと疑問に思われるかもしれません。しかしVSTSではprivateやinternalメソッドへの単体テストの雛型を作成すると同時にプライベートアクセッサが作成され、作業者が特に意識しなくともこれらのメソッドにアクセスし、テストを作成することができます。

 プライベートアクセッサとは、privateやinternal修飾子が付与されて別アセンブリからはアクセスできないメソッドに対して、.NET Frameworkのリフレクション機能を利用してメソッドの呼び出しを行い、結果を取得するための手順が書かれたメソッドのことを指します。なお、プライベートアクセッサが作成された場合にはテストプロジェクトに「VSCodeGenAccessors.cs」(Visual Basicでは「VSCodeGenAccessors.vb」)というファイルが作成され、テストプロジェクト内で必要なすべてのプライベートアクセッサが格納されています。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
周辺ファイルを利用しよう

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

  • このエントリーをはてなブックマークに追加
Visual Studio 2005 Team Edition for Software Developersを使ってみよう連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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プロジェクト りばてぃ/FUJIKO/ナオキ(リバティ, フジコ, ナオキ)

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1850 2008/08/26 14:06

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング