GroovyTestCase のshouldFail() に関して。あと再発明してました。
groovy.util.TestCase のshouldFail(Closure code) は「何らかの失敗が期待されるテスト」に用いると絶大な効力を発揮します。
「何らかの失敗」というのはError でもException でも“assert false” でも、とにかく正常にプログラムが動かない状態の事を指します。
例えばこのような感じ。
これらは全て「何らかの失敗」をするので、shouldFail(Closure code) は成功します。したがってテストはパスします。
このようにshouldFail(Closure code) は大変便利ですが、いささかパワフル過ぎるケースもあります。
例えばこんなJava のメソッドのテストをしたい時を考えます。
(このサンプルソースについて深く考えないで下さい。深く考えたら負けです!!)
この場合、shouldFail(Closure code) を利用すると、“AssertionError”で失敗したのか“NullPointerException”で失敗したのか、
“IllegalAccessException”で失敗したのか、はたまたその他の部分 (Do something の中身とか) で失敗したのかがわかりません。
このような時にshouldFail(Closure code) を使うと、テストが不明瞭というか不完全というか、まあキモイ状態になってしまうので、
「さてどうしたもんか」と考えるわけであります。
(蛇足) 奮闘記
ここから先はshouldFail(java.lang.Class clazz, Closure code) の存在を知らずに再発明に勤しんでいた記録です。なので読まなくても大丈夫です。
「とりあえず、Error かException かだけでも判別してーなー」という事で書いたのがコチラ
動きますが、劣化再発明である事に違いありません。
次に「Failure の原因が任意のクラス由来かどうかテストしてーなー」と思って書いたのがコチラ
挙動的にはshouldFail(java.lang.Class clazz, Closure code) と変わりありません。
そうして「できたできた」と悦に入っている最中、チラッとGroovyTestCase のドキュメントを見て愕然。
「既にあるじゃねーか!!!」