日々常々

ふつうのプログラマがあたりまえにしたいこと。

GroovyのPowerAssertさんをいじめようとしてみた

GroovyのはPowerAssertという素敵なアレがあります。

assertに失敗したらそれを表示してくれるんですね。

でも文字列で表示するだけなので、toStringの実装がequals/hashCodeの実装とアレだったらこう、残念なことになります。

hogehogeなのにfalseだよ、と。こりゃ駄目だ。この辺も考えてtoString/equals/hashCodeは実装した方がいいかもしれませんのー。

文字列を表示するということは……

で、思ったんです。toStringの結果を返すなら、つまり、toStringに例外を投げさせたらPowerAssertの結果表示の時に例外でゔぉあーなことになるんじゃね?と。で。

class Hoge { public String toString() { throw new Exception() } }

いざ。

……駄目でした。涼しい顔して流されました。
「toString() threw java.lang.Exception」だってよ。ありがとよ。ちくしょう。

矛先を変えて

ちなみに、groovyshは入力された結果のtoStringを表示しますので、上記のtoStringで例外投げるようなのを実行するとスタックトレース吐きますの。

でも表示の時に出てるだけだから、処理自体はされてる。hoge単体を実行してもスタックトレース出ることからわかるかなと。

PowerAssertさんは思った以上強かったので、groovyshさんをいじめてみました。