uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

パワーアサート(Power Assert)の真の意味

つい先ほど、Spockの記事をみてましたところPower Assertのことが書いてありました。ご存知のように、Groovy 1.7の「Power Assert機能」は、Spockの機能から由来しています。私としては結構お気に入りの機能です。Power Assertを気軽に体験するにはこちらとかもどうぞ

私は、Power Asserについて、分かりやすくて便利だな、とは思ってましたが、Spockの記事に書いてあったことで「はた!」とわかったのは、Power Assertがさまざまなassertのバリエーションを不要にするってことです。

さまざまなassertのバリエーションとは、

  • assertEquals
  • assertSame
  • assertNotEquals
  • assertNotNull

とか、極めつけはhamcrest

  • assertThat(theBiscuit, is(equalTo(myBiscuit)))
  • assertThat(11, greaterThan(10));

こういうやつ。

Assertにこういうバリエーションが必要な理由の一つは、Assert失敗時に、なぜ失敗したかという原因を極力分かりやすくしたいからです*1。エラーメッセージを親切にするためにです。でも、GroovyのPower Assertがあればassert(boolean)1個で十分なのですね。

これはコペルニクス的転回だなと思いました。

Power Assertは標準Groovyにとりこまれましたが、Spockには他にも便利機能があるみたい。Spockあなどれじ。

*1:hamcrestの場合、英語っぽいいとうれしいという需要もあるのかもしれません。でも「11>10」じゃなく「11, greaterThan(10)」と本当に書きたいのかどうかは私には分かりません。