Specs2 2.0 でTODOリストを書いたらいつの間にか仕様書になってた編
Specs2 2.0 使ってますか?s2記法という新しい書き方が個人的に大ヒットだったので、それに纏わる記事を書いてみます。今回は、TODOリストを書いてたつもりがいつの間にか、ちゃんとした仕様書になっていたという体でいきたいと思います。
Scala - Specs2 2.0 で手抜きテストを行う - Qiita [キータ] という記事の続編的なものです。
o Hoge オブジェクト
+ Hoge.hoge でほげーという文字列を返す
+ Hoge.fuga でふがーという文字列を返す
例えばこんなTODOリストを作成したとします。今から実装する Hoge オブジェクトについてのTODO です。
import org.specs2._
import specification._
class HogeSpec extends script.Specification with Grouped {
def is = s2"""
o Hoge オブジェクト
+ Hoge.hoge でほげーという文字列を返す
+ Hoge.fuga でふがーという文字列を返す
"""
"Hoge オブジェクト" - new group {
}
}
前の記事に比べてだいぶん呪文が増えてきましたが、s2記法に先ほどのTODOリストを食わせてみました。これを実行すると、
[info] HogeSpec
[info] o Hoge オブジェクト
[info] * Hoge.hoge でほげーという文字列を返す - PENDING - g1.e1
[info] * Hoge.fuga でふがーという文字列を返す - PENDING - g1.e2
[info] Total for specification HogeSpec
[info] Finished in 18 ms
[info] 2 examples, 0 failure, 0 error, 2 pending
こんな感じで、ペンディングされたテスト項目が二つ表示されています。s2 記法の中に + で始まる行を書くとテストとして認識されるようです。
Specification が script.Specification になったのは、この + で始まる行をテストとして認識させる為のものです。
Grouped trait によって、テストのグループ化に対応します。(僕は残念ながらグループを使わずにこれのテストを走らせる方法がわからなかったので今回グループの説明も加えました。)
さて、テストはどう書けばいいのでしょうか。
"Hoge オブジェクト" - new group {
eg := Hoge.hoge === "ほげー"
}
こういう記法になります。これによってペンディングされていた一つ目のテストが実行される事になります。同様に二つ目の eg := <マッチャー文> を書く事で現存するテストは二つとも実行されます。
「TODOリスト」は自由なインデントが可能です。+ のある行は必ず先頭に空白文字を入れる必要がありますがそれ以外の制限はない(はず)です。自由にTODOリストを作成した上で、それをs2記法に食わせれば、TODOの管理も簡単になり、いつの間にか仕様書として形になってることでしょう。