9

对于我的单元测试,我想设置一个数据库,用基本信息填充它,并在回滚对数据库所做的所有更改的会话中运行每个测试,以便始终为每个测试提供原始副本。

我正在寻找类似的东西

db withSession {
   <create my objects under test>
   <run operations>
   <run asserts>

   this.rollback()
}

回滚功能在早期版本的 Scala Query 中,但现在似乎丢失了。我应该如何实现这个功能?

最好的祝福

4

1 回答 1

2

这是一个说明此行为的单元测试

https://github.com/szeiger/scala-query/blob/master/src/test/scala/org/scalaquery/test/TransactionTest.scala

GitHub 上的链接目前是 404,但我从 google 缓存中提取了源代码:

package org.scalaquery.test

import org.junit.Test
import org.junit.Assert._
import org.scalaquery.ql._
import org.scalaquery.ql.extended.{ExtendedTable => Table}
import org.scalaquery.session.Database.threadLocalSession
import org.scalaquery.test.util._
import org.scalaquery.test.util.TestDB._

object TransactionTest extends DBTestObject(H2Disk, SQLiteDisk, Postgres, MySQL, DerbyDisk, HsqldbDisk, MSAccess, SQLServer)
class TransactionTest(tdb: TestDB) extends DBTest(tdb) {
  import tdb.driver.Implicit._

  @Test def test() {

    val T = new Table[Int]("t") {
      def a = column[Int]("a")
      def * = a
    }

    db withSession {
      T.ddl.create
    }

    val q = Query(T)

    db withSession {
      threadLocalSession withTransaction {
        T.insert(42)
        assertEquals(Some(42), q.firstOption)
        threadLocalSession.rollback()
      }
      assertEquals(None, q.firstOption)
    }
  }
}
于 2011-05-23T14:47:50.717 回答