読者です 読者をやめる 読者になる 読者になる

seratch's weblog in Japanese

About Scala, Java and Ruby programming in Japaense. If you need English information, go to http://blog.seratch.net/

ScalikeJDBC にユニットテストサポートを追加

ScalikeJDBC Cookbook を書いていて、テスト毎に終わったら自動でロールバックという仕組みは標準で提供してもよいかなと感じたので、実装してリリースしました。別の jar になっているので test スコープで追加してご利用ください。

https://github.com/seratch/scalikejdbc/tree/master/scalikejdbc-test

使い方としては ScalaTest もしくは specs2 それぞれ用意されている AutoRollback という trait を使って、ゴニョゴニョするという感じです。

ScalaTest の場合は

import org.scalatest.fixture.FlatSpec
import scalikejdbc.scalatest.AutoRollback

class MemberSpec extends FlatSpec with AutoRollback {

  behavior of "Member"

  it should "create a new record" in { implicit session =>
    // テストの中身
  }
}

specs2 の場合は

import org.specs2.mutable.Specification
import scalikejdbc.specs2.mutable.AutoRollback

class MemberSpec extends Specification {

  "Member should create a new record" in new AutoRollback {
    // テストの中身
  }
}

もしくは

import org.specs2.Specification
import scalikejdbc.specs2.AutoRollback

class MemberSpec extends Specification { def is =

  "Member should create a new record" ! autoRollback().create

  case class autoRollback() extends AutoRollback {
    def create = this { 
      // テストの中身
    }
  }
}

という感じですね。何やら最後のやつは変態的ですが、こういうものらしいので。。。

その他に、別のデータソースへの接続とフィクスチャーを書ける場所を用意していますので、興味がある方はこちらをご覧ください。

https://github.com/seratch/scalikejdbc/tree/master/scalikejdbc-test

設定ファイルの読み込みの共通化あたりもあっていい気はしていますが、実際、アプリケーションによって仕組みは結構まちまちですし、よい実装アイデアも思いつかなかったので、とりあえず様子を見ることにしました。Typesafe が提供している config をサポートする何かを提供するかもしれませんが、未定です。

https://github.com/typesafehub/config

あと一応 Play アプリのテストのサポートも少し検討しましたが、実際 Play のテストの仕組みで事足りそうなので見送りました。

models の単体でのテストなら元々 Play 非依存なので今回追加した仕組みが使えますし。逆に FakeApplication とか出てくるところになると ScalikeJDBC としては守備範囲外かなということで。

私の思いつかないユースケースなどはありそうな気がするので、アイデアやフィードバックなど随時お待ちしております。