[Spock] Spock 関連でゴニョゴニョしてる件

こんばんは。[twitter:@bikisuke] です。

今日の Advent Calendar ネタは、Spock です。
僕は G* 一派だからという贔屓目は抜きにしても、Java のテスティングフレームワークとして Spock はもっと評価されるべきじゃないかと思ってます。
なので、今回はその辺りに触れつつ、密かに企んでいることについて書きたいと思います。

Spock のいいところ

何と言っても、シンプルな記述ができるところは Spock の大きな魅力ではないでしょうか。もちろん、テスト対象クラス(機能)によっては複雑になることもあるかもしれませんが、可読性に関しては JUnit の比ではないと思ってます。
# これは Groovy と Java の言語特性や制約に依るところが大きいので、Spock が良くて JUnit がダメと言ってるわけではないです。念のため。

あと、拡張の仕組みもいい感じだと思いますね。現状だとサンプルとかソースを読まないと、どう拡張すればいいのか分からないのが残念なとこですがw
Spring を使ってる人は Spring 用の拡張ライブラリは既にあるので、導入をオススメします。

Spock の弱点

とは言いつつも、情報が少ないとか受け入れテスト(UAT)に不向きとか弱点もいくつかあります。
個人的には、特に UAT に使えないのはもったいないなぁと思ってます。
今、Java で UAT の自動化をやろうとすると、Cucumber ぐらいしかないような気がします。でも、Cucumber は自分的にはちょっと無いんですね…

なぜCucumber じゃダメなのか?

単に個人的な好みに依るのですが、Cucumber はフィーチャファイルとテストコードを正規表現マッピングさせる必要があります(僕の知る限りでは)。

これがね・・・やっぱり好きくない。自分が Ruby に後ろ向きなのも一因ですけど、やはり可読性の面で良くないし正規表現は直感的とは言い難いですよね。
#これも自分が正規表現を得意としていないってこともありますけど...

でも、UAT をプロダクトオーナーとかユーザーに書いてもらって、それをそのまま利用できるってのは UAT として非常に魅力的なこと(というより必須?)だし、[twitter:@shuji_w6e] さんが 現状では Cucumber 一択、と言われるのも理解できます。

Spock を活用するために

前置きが長くなりましたが、そんなこともあって、今 Spock を UAT で使えるようにするサポートツールを作っています。
本当は [twitter:@nobeans] さんのように Advent Calendar のタイミングで公開したかったのですが、いろいろ問題を抱えていて、只今絶賛開発中です。

ユースケースとしては、Gherkin 書式っぽいテキストをユーザーに記述してもらい、それをインプットにして Spock のテストコードスケルトンを吐き出す、という利用方法を想定しています。

スクリーンショットを見てもらうのが一目瞭然ですかね?こんなイメージです。

HelloSpock.feature ファイルを用意してですね、

FeatureFileParser に喰わせるとメソッド化するって感じです。
これを HelloSpockSpec.groovy として出力させようという魂胆です。

実際にこれが有効アプローチかどうか分かりませんが、ニーズがあるなら、grailsプラグイン化とかIDE対応とか考えていきたいなと思ってます。
まぁ、まずはベースとなるエンジンを完成させるのが直近の目標ですね。

まとめ

ということで、できれば来月中に公開したいなと思ってますが、早く試してみたい方は「はよ!」と急かしてください。
#そしたら、もうちょっと力を入れて頑張ります。:-P
来年は Spock の普及活動をもっとやってこうと思うので、賛同いただける方は一緒に Spock 盛り上げていきましょう!

明日は、名古屋のにゃんこパパで御馴染み?の [twitter:@bluepapa32] さんです。よろしくお願いしまーす。