CodeZine(コードジン)

特集ページ一覧

Visual StudioのMSTestでTDDを行う方法

C#で始めるテスト駆動開発入門(2)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/02/10 14:00
目次

お題その1

 「お題」の内容について詳しくは、前回の記事(p.4)をご覧ください。メソッドの外部設計は次のようになります。

【お題その1】の外部設計
作るもの メソッド「Calc打率」
置き場所 クラス「野球選手」
引数 int 打席数, int 打数, int 安打数
返値の型 decimal
刺激と反応
刺激(引数) 反応
[打席数] [打数] [安打数]
任意
(打数以上)
0 任意 ゼロ除算例外が発生
0以外 任意 返値:打率(=安打数/打数、小数点以下4桁目を四捨五入)

最初のテストケース

 最初は、もっとも簡単な反応を選びます。

引数:打数=1、安打数=0 → 反応:返値(打率)=0.0

 Visual Studioが自動生成した「UnitTest1.cs」を削除して、新しく単体テストを追加します。メニュー[テスト]-[新しいテスト]を選ぶと、次のような「新しいテストの追加」ダイアログが出て来るので、[基本単体テスト]を選び、「野球選手Tests.cs」と名前を付けて[OK]をクリックします。

「新しいテストの追加」ダイアログ
「新しいテストの追加」ダイアログ
注6: 「新しいテストの追加」ダイアログで作成できるテスト

 次のようなテストを作ることができます。
 

種類 説明
Webパフォーマンス テスト Webサイトのパフォーマンスのテスト。ロードテストの一部として使う。
コード化されたUIテスト UIの操作を記録して、繰り返し自動実行できる。デスクトップアプリケーションもWebアプリケーションも可能。
データベース単体テスト 主に、データベースのストアドプロシージャをテストするのに使う。
ロードテスト 負荷テストを行うために、複数のテストを集約し、並行して実行することができる。
基本単体テスト ユニットテストの枠だけを作る。
順序指定テスト 複数のテストを集約し、指定順序で実行する。
単体テスト 基本単体テストと同じユニットテストだが、TestContextオブジェクトや前処理・後処理のスケルトンも生成する。
単体テスト ウィザード 既存の製品コードから、ユニットテストのスケルトンを生成する。
汎用テスト 既存の自動実行テストプログラムを指定し、実行したテスト結果を取り込む。

 TDDで使うユニットテストは、「基本単体テスト」・「単体テスト」・「単体テスト ウィザード」のいずれかで作成することができます。「単体テスト」で生成される前処理・後処理については「Visual Studio 単体テスト機能大全(3) Visual Studio単体テストの前準備と後始末」を、「単体テスト ウィザード」でユニットテストを作成する方法は「Visual Studio 単体テスト機能大全(1) 改訂版 Visual Studioで作る単体テスト、基本のき(VS2010向け改訂版)(p.2)」をご覧ください。今回は簡単なテストコードなので、「基本単体テスト」を使います。

 なお、「新しいテストの追加」ダイアログ下方の「テストプロジェクトに追加」ドロップダウンを実際に見てもらうと、テストプロジェクトとして作ったプロジェクトにしかテストを追加できないことが分かります。

 続いて、野球選手Testsクラスにテストケースを次のように記述します。

【テストコード】野球選手Tests.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Tddbc横浜;

namespace Tddbc横浜Test {
  [TestClass()] //←NUnitと違う
  public class 野球選手Tests {
    [TestMethod()]//←NUnitと違う
    public void Calc打率Test01_打席数1打数1安打数0のとき_打率0() {
      //準備
      int 打席数 = 1;
      int 打数 = 1;
      int 安打数 = 0;
      decimal 期待値 = 0.0m;

      野球選手 p = new 野球選手();

      //実行
      decimal 打率 = p.Calc打率(打席数, 打数, 安打数);

      //検証
      Assert.AreEqual<decimal>(期待値, 打率); //←型指定できるところがNUnitと違う
    }
  }
}

 前回の記事(p.4)のNUnitのテストコードと比べてみてください。クラスとメソッドに付ける属性が異なることと、型指定付きのAssert.AreEqual()メソッドで厳密に比較できることが違うくらいです。

 野球選手クラスがまだ存在しないのでコンパイルエラーになります(=RED)。REDになったので、製品コードを書けます。野球選手クラスを作り、次いでCalc打率メソッドを作り、メソッドの中身は仮実装し、コンパイルしてテストを実行してみます。テストを実行するには、テストメソッド内で右クリックし[テストの実行]を選択します。(「Visual Studioで作る単体テスト、基本のき(VS2010向け改訂版)(p.2)」を参照)

【製品コード】野球選手.cs
namespace Tddbc横浜 {
  public class 野球選手 {
    public decimal Calc打率(int 打席数, int 打数, int 安打数) {
      return 0.0m;
    }
  }
}

 これで最初のGREENに到達です。

最初のGREEN
最初のGREEN

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

バックナンバー

連載:C#で始めるテスト駆動開発入門

もっと読む

著者プロフィール

  • biac(ばいあっく)

    HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。 2014/10~2019/6 Microsoft MVP (Windo...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5