Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

NUnitの全貌 ~ 基本から、最新バージョンの新機能まで

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

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

 NUnitの最新バージョン2.6の主な機能を解説します。普段からNUnitを使っている開発者でも、「こんな機能があったのか!」と驚くようなことがきっとあるでしょう。

目次

はじめに

 C#でTDDしている開発者にとって、おそらく一番なじみのあるテスティングフレームワークはNUnitでしょう。今年の2月に、そのVersion 2.6が正式リリースされました。2.x系はこれが最後のリリースとなり、次はVersion 3になるとされています(NUnit Roadmap参照)。この機会に、NUnitの基本機能から、2.6で追加された新機能まで、全体を一通り把握しておきましょう。

NUnitの最新版バージョン2.6のテストランナー(nunit.exe)
NUnitバージョン2.6

 本記事では、TDDの話からは離れて、NUnitの機能の紹介だけをします。それでも膨大な量がありますので、記事では概要を述べるだけに留めてサンプルコードの掲載を省略した部分がかなりあります。ぜひサンプルソースもダウンロードして読んでください。また、まず使わないだろうと思われる機能や、Assert.That()で使うたくさんの制約・修飾子なども説明していませんので、さらに深く学びたい方はNUnitのドキュメント(英文)をあたってください。

対象読者

  • TDDに興味をお持ちの.NET Frameworkの開発者。
  • テストの自動化に興味をお持ちの.NET Frameworkの開発者。

必要な環境

 サンプルコードを試してみるには、C# 2010(Expressで可)とNUnit 2.6が必要です。本稿執筆時点では、下記から入手できます。

C# 2010 ExpressとNUnitの入手先、およびNUnitのインストール手順

これだけで、どんなテストだって書ける! ~ Assert.IsTrue()

(サンプルコード:「その01_基本」クラス)

 自動化されたユニットテストを作るには、プログラムを実行してみて期待通りの結果が得られたかどうかを判定するというコードを書きます。NUnitでは、3つのことを知っていれば、極端な話ですがどんなテストでも書くことが可能です。

  • TestFixture属性:テストクラスに付ける
  • Test属性:テストメソッドに付ける
  • Assert.True()(またはIsTrue())メソッド
その01_基本.cs:Assert.True()の使い方
[TestFixture]
public class その01_基本 {
  [Test]
  public void Test01_IsTrueだけ知っていればどんなテストだって書ける() {
    var 期待値 = 3;	//実行した結果こうなるはず、という値。即値(リテラル)で書く。
    var 実際の値 = 整数.加算する(1, 2);	//テスト対象を実行して、結果を取り出す。
    Assert.True(期待値 == 実際の値);	//実行した結果を検証する
  }
}

 NUnitのテストランナー(nunit.exe)は、TestFixture属性の付けられたクラスにユニットテストが記述されていると認識し、Test属性の付けられたメソッドを抽出して実行します。実行して、メソッド中のAssertクラスに対する呼び出しが例外を出したらテストは失敗(RED)、そうでなければ成功(GREEN)とレポートします。Assert.True()では、引数がfalseだったら失敗とレポートされます。

 なお、Assert.True()に限らずAssertクラスが持っている検証のためのメソッド(アサーション)には、失敗時に指定したメッセージを出すためのオーバーロードがたいてい用意されていますので、有効に活用してください。

その01_基本.cs:失敗時にメッセージを出す
var n = 3;
var m = 4;
Assert.True(n == m, "{0}と{1}は等しくありません。", n, m);

/* [実行結果]
CsTdd03Tests.その1_基本.Test01B_失敗時のメッセージ2_RED:
3と4は等しくありません。 Expected: True But was: False */

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

修正履歴

  • 2013/04/03 13:13 p.2 Test03_IsNullメソッドで使っているアサーションがNull()になっていました。IsNull()に訂正しました。

  • 2012/04/27 14:54 p.6「Theory属性とDatapoints属性」の説明とコードを訂正

  • 2012/04/02 13:02 初稿完

著者プロフィール

  • biac(ばいあっく)

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

バックナンバー

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

もっと読む

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