ダウンロード サンプルソース(C#) (29.1 KB)
ダウンロード CsTdd03__20130403.zip (29.0 KB)
-
- Page 7
独自のアサーションを作る
(サンプルコード:「その12_独自のアサーションを作る」クラス)
NUnitは、どうやってテストの成功/失敗を判断しているのでしょう? テストメソッドから例外が投げられると、失敗と判定しているのです。ということは、何らかの判定をして例外を投げるメソッドを用意すれば、独自のアサーションとして利用できることになります。投げる例外をNUnitのAssertionExceptionにしておくと、失敗時のエラーメッセージも分かりやすくなります。
AssertionExceptionを投げるprivate static void AssertEven(int n) { if (n % 2 != 0) { var msg = string.Format( @" 期待値: 偶数 実際は: {0}", n); throw new AssertionException(msg); } } [Test] public void Test01_独自に定義したAssertメソッドを使う_RED() { AssertEven(3); }
また、Assert.That()で使う制約も、NUnitのConstraintクラスを継承して独自のものを作ることができます(Custom Constraints)。次の例では、偶数かどうかを判定するEvenConstraintクラスを作っています。
[TestFixture] public class その12_独自のアサーションを作る { [Test] public void Test02_独自に作成したEvenConstraintを使う() { Assert.That(8, MyConstraint.IsEven()); Assert.That(new int[] { 2, 4, 6 }, Is.All.Even()); } } public class EvenConstraint : Constraint { // 検証メソッド public override bool Matches(object actual) { base.actual = actual; var en = actual as IEnumerable; if (en != null) return en.Cast<object>().All(o => IsObjectEven(o)); return IsObjectEven(actual); } private static bool IsObjectEven(object o) { var num = o as int?; return (num != null) && (num.Value % 2 == 0); } // 出力 public override void WriteDescriptionTo(MessageWriter writer) { writer.Write("偶数"); } } public static class MyConstraint { public static Constraint IsEven() { return new EvenConstraint(); } } public static class ConstraintExtension { public static Constraint Even(this object n) { return new EvenConstraint(); } }
- 修正履歴
-
- 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...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
