けさらんぱさらん

方向性は定めず、ただ思いつくままに

ChainingAssertionでテストをエレガントに

いつもの通りひさしぶりのブログです。
以前から使っている@neuecc先生作のChainingAssertionについて書きます。
基本的な使い方は、こんな感じ

var actual = Add(5,3);
actual.Is(8);

MSTestだと

Assert.AreEqual(8, actual);

う~ん


MSTestがイケてないところの1つに例外のテストがあります。

[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void 例外が発生する()
{
  // 例外が発生する処理
}

発生する例外を属性に設定してあげればOKです。
これはこれで良さそうな気もするのですが、
例外が発生した後に別なチェックもしたいとかができない!


これをChainingAssertionだと

[TestMethod]
public void 例外が発生する()
{
  AssertEx.Throws<ArgumentException>(() => Add(5, 3));
  // 引き続きテスト
}

これであればこの処理の後に引き続きテストが続けられます。


例外メッセージを確認したい場合は、戻り値がExceptionになっているので

AssertEx.Throws<ArgumentException>(() => Add(5, 3)).Message.Is("正の数を指定してください");

てな感じで可能になります。
こうゆう設計は見習いたいなー


ということ皆さんChainingAssertion使いましょう