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 としては守備範囲外かなということで。
私の思いつかないユースケースなどはありそうな気がするので、アイデアやフィードバックなど随時お待ちしております。