読者です 読者をやめる 読者になる 読者になる

その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

GroovyTestCase のshouldFail() に関して。あと再発明してました。

groovy.util.TestCaseshouldFail(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)
を使えば良いです。以下のように。

(蛇足) 奮闘記

ここから先はshouldFail(java.lang.Class clazz, Closure code) の存在を知らずに再発明に勤しんでいた記録です。
なので読まなくても大丈夫です。

「とりあえず、Error かException かだけでも判別してーなー」という事で書いたのがコチラ
動きますが、劣化再発明である事に違いありません。

次に「Failure の原因が任意のクラス由来かどうかテストしてーなー」と思って書いたのがコチラ
挙動的にはshouldFail(java.lang.Class clazz, Closure code) と変わりありません。

そうして「できたできた」と悦に入っている最中、チラッとGroovyTestCase のドキュメントを見て愕然。
「既にあるじゃねーか!!!」

結論2

ドキュメントは読もう。

GroovyTestCase のドキュメント

GroovyTestCase (groovy 2.1.6 API)