SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

独自のアサーションを作る

(サンプルコード:「その12_独自のアサーションを作る」クラス)

 NUnitは、どうやってテストの成功/失敗を判断しているのでしょう? テストメソッドから例外が投げられると、失敗と判定しているのです。ということは、何らかの判定をして例外を投げるメソッドを用意すれば、独自のアサーションとして利用できることになります。投げる例外をNUnitのAssertionExceptionにしておくと、失敗時のエラーメッセージも分かりやすくなります。

その12_独自のアサーションを作る.cs: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クラスを作っています。

その12_独自のアサーションを作る.cs:独自の制約を作る
[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();
	}
}

次のページ
NUnit2.6の新機能:Action属性クラス

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
C#で始めるテスト駆動開発入門連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6518 2013/04/03 13:24

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング