【发布时间】:2016-01-01 19:02:02
【问题描述】:
这是一个 play 2.4 应用程序,使用规范 2 和 slick 3.1。 在我的测试过程中,我使用了一个带有演变的内存数据库。我的问题是:目前,内存数据库在所有测试中都保持活动状态,并且在每个测试用例之后不会重置为初始空状态。
我当前的代码如下所示:
package test
import play.api.test._
import play.api.test.Helpers._
import services.ProjectService
import scala.concurrent.Await
import scala.concurrent.duration.Duration
import org.specs2.mutable._
import scala.concurrent.ExecutionContext.Implicits.global
import testhelpers.Injector
class ModelSpec extends Specification {
import models._
val projectService = Injector.inject[ProjectService]
"A project" should {
"be inserted" in {
running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val action = projectService.create("A")
.flatMap(_ => projectService.all)
val result = Await.result(action, Duration.Inf)
result must be_==(List(Project(1, "A")))
}
}
"be inserted2" in {
running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val action = projectService.create("A")
.flatMap(_ => projectService.all)
val result = Await.result(action, Duration.Inf)
result must be_==(List(Project(1, "A")))
}
}
}
}
第一次测试通过。第二个测试失败并出现错误: List(Project(1,A), Project(2,A)) is not equal to List(Project(1,A)) (ModelSpec.scala:42) 因为内存数据库被保留测试用例之间。
您可以在此处找到示例项目:https://github.com/nemoo/play-slick3-example
如何为每个测试用例创建一个新的数据库?
【问题讨论】:
-
您可能想查看Acolyte approach,了解基于 JDBC 的持久层的完全隔离的单元测试(参见 example 与 Slick 持久性)。
-
刚刚发现它在 play 2.3 中按预期工作(参见类似的github.com/nemoo/democratizer/blob/master/test/ModelSpec.scala),但在 play 2.4 中不起作用。我不想添加额外的依赖项。
标签: scala playframework dependency-injection slick specs2