« [プログラム設計事始] メソッドの外部設計とテストファースト(2) ~ なんでもユニットテストで記述できるか? | トップページ | MSDN ライブラリに VS2010 のドキュメントが公開されている »

2009年6月10日 (水)

[NUnit 2.5] TestCaseAttribute の使いかた

NUnit 2.5 で増えた機能の一つに TestCase 属性があります。

御本家のドキュメントを見ると…

[TestCase(12,2, Result=6)]
[TestCase(12,4, Result=3)]
public int DivideTest(int n, int d)
{
  return( n / d );
}

…こんな使いかたが載っています。

属性の引数が、 テストメソッドの引数として順次渡されるようですね。
通常のテストメソッドは void ですが、 値を返すようにしてやると、 属性の名前付き引数 Result と比較してくれるみたいです。

属性の名前付き引数としては、 ほかに TestName とか ExpectedException とかが取れるようです。

ということで、 試行錯誤してみました f(^^;
こんな風に書けます。

[Test(Description = "GetGreet() のテスト5: 20:00 <= t < 24:00")]
[TestCase(20, 0, 0, 0, Result = "Good night", TestName = "t=20:00")]
[TestCase(22, 0, 0, 0, Result = "Good night", TestName = "t=22:00")]
[TestCase(23, 59, 59, 999, Result = "Good night", TestName = "t=23:59:59.999")]
public string GetGreetTest05_20To24(int h, int m, int s, int ms)
{
    DateTime input = new DateTime(2009, 6, 9, h, m, s, ms);
    return MyClass.GetGreet(input);
}

[Test(Description = "GetGreet() のテスト6: t == 24:00")]
[TestCase(24, 0, 0, 0, ExpectedException = typeof(ArgumentOutOfRangeException), TestName = "t=24:00")]
public string GetGreetTest06_24(int h, int m, int s, int ms)
{
    DateTime input = new DateTime(2009, 6, 9, h, m, s, ms);
    return MyClass.GetGreet(input);
}

※ この 2つのテストメソッドは、 ひとつにまとめて書くこともできます。 テストケースごとに 1メソッドという書き方をしたので、 分けてあります。

引数を変えて何回もテストケースを走らせるときには、 すごく便利です。 上側の GetGreetTest05_20To24() では、 テストは引数を変えて 3回実行されます。
Visual Studio 2008 にも似たような仕掛けはありますが、 テストが、 データベース ( ODBC ドライバでつながるなら何でもいいので、 Excel も使える ) とテスコードに分かれてしまうのが、 ( このくらい簡単なテストだと ) 泣き所。

なお、 属性の引数には定数しかダメなので、 [TestCase(new DateTime(… とは書けませんでした。
TestName は、 NUnit GUI に表示される ( 下図参照 ) ので、 重宝しそうです。
Description は、 NUnit GUI ではプロパティを出さないと見えないので、 あまり役に立たないかもしれませんね。
テストメソッド中で例外が出る場合は、 Result の代わりに ExpectedException を書いておけば OK です。

20090610_testcaseattribute01

|

« [プログラム設計事始] メソッドの外部設計とテストファースト(2) ~ なんでもユニットテストで記述できるか? | トップページ | MSDN ライブラリに VS2010 のドキュメントが公開されている »

プログラミング」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [NUnit 2.5] TestCaseAttribute の使いかた:

« [プログラム設計事始] メソッドの外部設計とテストファースト(2) ~ なんでもユニットテストで記述できるか? | トップページ | MSDN ライブラリに VS2010 のドキュメントが公開されている »