ダウンロード サンプルソース(C#) (29.1 KB)
ダウンロード CsTdd03__20130403.zip (29.0 KB)
共通の準備と後始末
(サンプルコード:「その09_共通の準備と後始末」クラス)
共通の準備と後始末をするメソッドを書けるように、4つの属性が用意されています。
TestFixtureSetUp属性
この属性が付けられたメソッドは、そのテストクラスでのテストを実行する前に、1度だけ実行される。SetUp属性
この属性が付けられたメソッドは、そのテストクラス中のテストメソッドを実行する前に、毎回実行される。TearDown属性
この属性が付けられたメソッドは、そのテストクラス中のテストメソッドを実行しおわった後に、毎回実行される。TestFixtureTearDown属性
この属性が付けられたメソッドは、そのテストクラスでのテストをすべて実行しおわった後に、1度だけ実行される。
これらのメソッドは、NUnit2.5からはstaticメソッドにすることもできるようになりました。また、複数あってもよくなりましたので、ベースクラスと継承したテストクラスの両方に書けるようになりました。
なお、いくつかのテストメソッドだけに共通する準備と後始末を書くための仕掛けとして、NUnit2.6ではAction属性クラスが導入されています(後述)。
データ駆動テスト
(サンプルコード:「その10_データ駆動テスト」クラス)
テストで使う引数や期待値などを外部から与えるデータ駆動テストは、MSTestでは良く知られていますが、NUnitでもバージョン2.5から対応しています。TestCaseSource属性を使います。
クラス内の指定したメンバーをソースとして、そこに含まれている値を順番にテストメソッドの引数に割り当ててくれます。
static int[] 偶数 = new int[] { 2, 4, 6, 8 }; [Test, TestCaseSource("偶数")] public void Test01a_ハードコーディングしたデータ_偶数(int num) { Assert.IsTrue(整数.Is偶数(num)); }
上の例では、TestCase属性を使うのとたいして違いがないように思えるかもしれませんが、メンバー変数をプロパティに変えると外部のデータを読み込んだりできるようになります。
次の例では、IEnumerable<TestCaseData>型を返すAllTestCasesというプロパティをソースにしていますが、このプロパティ内ではCSVファイルを読み込んで引数と期待値をセットしています。
// テストデータを提供するクラス public static class 偶数奇数データ { private const string DataCsvFile = "./偶数奇数データ.csv"; public static IEnumerable<TestCaseData> AllTestCases { get { foreach (var line in File.ReadLines(DataCsvFile)) { var items = line.Split(','); int num = int.Parse(items[0].Trim()); //引数 bool expected = bool.Parse(items[1].Trim()); //期待値 yield return new TestCaseData(num).Returns(expected); } } } } [TestFixture] public class その10_データ駆動テスト { [Test, TestCaseSource(typeof(偶数奇数データ), "AllTestCases")] public bool Test02b_CSVファイルから読み込んだデータ_全部(int num) { return 整数.Is偶数(num); } }
ソースとしてTestCaseDataのコレクションを使った場合は、この例のように期待値も提供することができます。また、期待される例外を渡すことも可能です。
- 修正履歴
-
- 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 初稿完
この記事は参考になりましたか?
- C#で始めるテスト駆動開発入門連載記事一覧
- この記事の著者
-
biac(ばいあっく)
HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
