NUnit += BDD

NUnitが2.4からBDD(Behavior Driven Development、振る舞い駆動開発)をサポートした。
NUnit自身は「Constraint-Based Assert Model」といってるけど。

NUnit 2.4.1 ダウンロード
BDDについては以下を参考
テスト駆動開発のテストは、テストか?

機能的には対して変わっていないけど、テストコードがより文法的になって意図を把握しやすくなった。

例えば「hogeManager」の「FindHoges」メソッドが返す値に対して検証を行う場合、以下のように記述した。

[Test]
public void テスト() {
    Hoge[] resultSet = hogeManager.FindHoges();

    Assert.IsNotNull(resultSet);
    Assert.AreEqual(resultSet.Length, 5);
    Assert.AreEqual(resultSet[0].Name, "Hoge");
}

意図的には、

  1. 配列が「null」でないか調べる。
  2. 配列の要素数が「5」か調べる。
  3. 「Name」プロパティの値が「Hoge」か調べる。

これがこんな感じに変わる。

[Test]
public void テスト() {
    Hoge[] resultSet = hogeManager.FindHoges();

    Assert.That(resultSet, Is.Not.Null);
    Assert.That(resultSet, Has.Length(5));
    Assert.That(resultSet[0].Name, Is.EqualTo("Hoge"));
    // or
    // Assert.That(resultSet[0], Has.Property("Name", "Hoge"));
}

すべて「That」から始まるところがミソ。
「・・・」が「・・・」である、というような文法的に意味のあるコードに変わった。

テスト駆動開発を本当に活用しようと思うといわゆる「テスト」ではなく、「仕様」を記述するようになっていくので、はじめから、「テスト」ではなく「仕様」を書くことを意識させたところが従来とは違うところかな。

まぁ、自分の場合はもともと「仕様」を書いていたので、気持ち的にはたいして変わらないけど、「Assert.That」まではコードが揃って、見た目的に美しいので気に入った。

もう、古いバージョンには戻れない。