SHOEISHA iD

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

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

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

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

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


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

よく使うAssert.AreEqual()やIsNull()など

(サンプルコード:「その01_基本」クラス)

 良く使うアサーションには、AreEqual()(および、その反対のAreNotEqual())などの等値アサート(Equality Asserts)や、IsTrue()(反対はIsFalse())やIsNull()(反対はIsNotNull())などの条件アサート(Condition Asserts)があります。

その01_基本.cs:AreEqual(), IsNull(), IsEmpty()
[Test]
public void Test02_AreEqual() {
	var 期待値 = 3;
	var 実際の値 = 整数.加算する(1, 2);
	Assert.AreEqual(期待値, 実際の値);
}

[Test]
public void Test03_IsNull() {
	string 実際の値 = null;
	Assert.IsNull(実際の値);
}

[Test]
public void Test04_IsEmpty() {
	string 実際の値 = string.Empty;
	Assert.IsEmpty(実際の値);
}

 AreEqual()のように、引数に期待値(expected)と実際の値(actual)の両方を取るアサーションでは、順序を間違えないように気を付けてください。期待値と実際の値を入れ違えると、REDになったときのメッセージが分かりにくいものになってしまいます。

 このほかに、次のようなアサーションも良く使われます

  • 同一インスタンスかどうかチェックする(Identity Asserts):AreSame()
  • 型をチェックする(Type Asserts):IsInstanceOfType<T>, IsAssignableFrom<T>()
  • ユーティリティ(Utility Method):Fail()(この行に到達した場合はテスト失敗とする), Inconclusive()(テストが未完成だと宣言する)

TestCase属性を使おう!

(サンプルコード:「その02_TestCase属性」クラス)

 1つのメソッドをテストするときに、同値クラスに分割してテストケースを作ることはよくあります。そのときTest属性を使っていると、テストケースの数だけテストメソッドを作ることになります。しかしそれらは、引数と期待値が異なる以外は同じです。NUnitでは、TestCase属性を使って1つのテストメソッドにまとめることができます。

その02_TestCase属性.cs:2つのテストケースを1つのメソッドにまとめる
[TestCase(1, false)]  // テスト実行時に、1が引数「入力」に、false が引数「期待値」に渡される。
[TestCase(2, true)]   // 同じく、こんどは 2 と true が渡される。
public void Test03_TestCase属性を使う_判定はメソッド内でAssertする(int 入力, bool 期待値) {
	Assert.AreEqual(期待値, 整数.Is偶数(入力));
}

 ただし、TestCase属性には引数を渡さなくても構いません。

その02_TestCase属性.cs:引数なしでTestCase属性を使う
[TestCase]
public void Test05_TestCase属性を使うが引数は渡さない_奇数() {
	Assert.IsFalse(整数.Is偶数(1));
}

 すなわち、TestCase属性はTest属性の代わりとしても使えるということです。テストを書き始めるときは最初からTestCase属性を使ってしまいましょう。

 なお、TestCase属性には、名前付き引数Resultを使って期待値を与えることもできます(サンプルコードを見てください)。

次のページ
文字列のアサーション

修正履歴

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング