2009年12月4日金曜日

spockを使う

さて, 普通にテストを書いていてもつまらないので:-) ちょっと違うことをやってみよう.

というか, JUnit系を普通に使っているだけだと, 昔ながらの「テスト要件に従った闇雲なテスト」をちょっと前倒しでやっているだけの話になりがちで, テスト書いている人は退屈だし, バグは早めに取れるけど, それだけの話しで, エキストリームじゃない.

もともとKent Beckが言っていたTDDは, 実は「テストの前倒し」とはだいぶ違って, そもそもテストですらなくて (結果的にテストっぽくなってるけど), 設計ingなわけだ. でも「アジャイルやってる」と主張する大方のプロジェクトで, そういうふうにテストを使っているところはあまり見ない. そもそもGrailsのようなDSLによる宣言的記述を中心にした環境を使っていると, そういう出番は限られる.

テストのもうひとつの視点は仕様としてのテストで, これは振る舞い駆動開発, BDDなどと呼ばれている. 今の仕事で, だらだらとした日本語の仕様書を書くのもあほらしいので, 仕様としてのテストを書いている. 動く仕様だ (ただしインスタンス・レベルで). 使うのは Spock. GroovyのBDD環境は, 他に easyB があるけど, いまいちである. テストが読めない. それは仕様書としてはだめだよね. Spockはなかなかいい.

GrailsでSpockを使うにはまず

$ grails install-plugin spock

すればいい.

http://grails.org/plugin/spock には "0.3-SNAPSHOT" とバージョンを明示してプラグインをインストールしろ, と書いてあるけど, 現時点ではバージョンを指定しなければ0.3がインストールされて, それでOK.

とりあえず最低限のドキュメントを訳した (というか, 現状はほぼこれくらいしかない).

これで, 「仕様を書く」ということと「品証としてのテスト」との違いが, プロジェクト・メンバにも分かりやすくなるんじゃないかな.

2010.01.05 追記

Grails 1.2には, 0.4-SNAPSHOTでないと動かない. grails install-plugin spockすれば, 0.4-SNAPSHOTがインストールされるみたい. ただし最初にgrails compileしないとtest-appできないので注意 (grails cleanしたときなども同様).