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使いましょう