9

単体テストでは、データベースをセットアップし、データベースに基本情報を入力し、DB に加えられたすべての変更をロールバックするセッション内で各テストを実行して、各テストの元のコピーを常に保持したいと考えています。

私は次のようなものを探しています

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 に答える