よく使うAssert.AreEqual()やIsNull()など
(サンプルコード:「その01_基本」クラス)
良く使うアサーションには、AreEqual()
(および、その反対のAreNotEqual()
)などの等値アサート(Equality Asserts)や、IsTrue()
(反対はIsFalse()
)やIsNull()
(反対はIsNotNull()
)などの条件アサート(Condition Asserts)があります。
[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つのテストメソッドにまとめることができます。
[TestCase(1, false)] // テスト実行時に、1が引数「入力」に、false が引数「期待値」に渡される。 [TestCase(2, true)] // 同じく、こんどは 2 と true が渡される。 public void Test03_TestCase属性を使う_判定はメソッド内でAssertする(int 入力, bool 期待値) { Assert.AreEqual(期待値, 整数.Is偶数(入力)); }
ただし、TestCase
属性には引数を渡さなくても構いません。
[TestCase] public void Test05_TestCase属性を使うが引数は渡さない_奇数() { Assert.IsFalse(整数.Is偶数(1)); }
すなわち、TestCase
属性はTest
属性の代わりとしても使えるということです。テストを書き始めるときは最初からTestCase
属性を使ってしまいましょう。
なお、TestCase
属性には、名前付き引数Result
を使って期待値を与えることもできます(サンプルコードを見てください)。