13
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Specs2 2.0 でTODOリストを書いたらいつの間にか仕様書になってた編

Last updated at Posted at 2013-08-27

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の管理も簡単になり、いつの間にか仕様書として形になってることでしょう。

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?