WARNING: This page is a guide for 2.x series.

Testing


Setup


See /documentation/setup.


For ScalaTest Users


AutoRollback trait provides automatic rollback after each test and data fixture.

NOTICE: scalikejdbc-test is compatible with ScalaTest 2.0 or higher.

import scalikejdbc._
import scalikejdbc.scalatest.AutoRollback
import org.joda.time.DateTime
import org.scalatest.fixture.FlatSpec

class AutoRollbackSpec extends FlatSpec with AutoRollback {

  // override def db = NamedDB('anotherdb).toDB

  override def fixture(implicit session: DBSession) {
    sql"insert into members values (1, ${"Alice"}, ${DateTime.now})".update.apply()
    sql"insert into members values (2, ${"Bob"}, ${DateTime.now})".update.apply()
  }

  behavior of "Members"

  it should "create a new record" in { implicit session =>
    val before = Member.count()
    Member.create(3, "Chris")
    Member.count() should equal(before + 1)
  }

}

For specs2 Users


AutoRollback trait provides automatic rollback after each test and data fixture.


unit style


import scalikejdbc._
import scalikejdbc.specs2.mutable.AutoRollback
import org.joda.time.DateTime
import org.specs2.mutable.Specification

object MemberSpec extends Specification {

  sequential

  "Member should create a new record" in new AutoRollback {
    val before = Member.count()
    Member.create(3, "Chris")
    Member.count() must_==(before + 1)
  }

  "Member should ... " in new AutoRollbackWithFixture {
    ...
  }

}

trait AutoRollbackWithFixture extends AutoRollback {
  // override def db = NamedDB('db2).toDB
  override def fixture(implicit session: DBSession) {
    sql"insert into members values (1, ${"Alice"}, ${DateTime.now})".update.apply()
    sql"insert into members values (2, ${"Bob"}, ${DateTime.now})".update.apply()
  }
}


acceptance style


import scalikejdbc._
import scalikejdbc.specs2.AutoRollback
import org.joda.time.DateTime
import org.specs2.Specification

class MemberSpec extends Specification { def is =

  args(sequential = true) ^
  "Member should create a new record" ! autoRollback().create
  end

  case class autoRollback() extends AutoRollback {

    // override def db = NamedDB('db2).toDB
    // override def fixture(implicit session: DBSession) { ... }

    def create = this {
      val before = Member.count()
      Member.create(3, "Chris")
      Member.count() must_==(before + 1)
    }
  }

}

If this webpage has a typo or something wrong, Please report or fix it. How?