在OneAppPerTest中为每个测试中的Play with evolution重新创建数据库

时间:2016-03-09 16:06:56

标签: scala playframework scalatest

我使用Play-Slick使用Playframework 2.4.6(想要更新到新版本2.5.0)。

我在更改单位和集成测试时遇到问题。 当我想测试我的控制器时,我需要每个测试的默认状态数据库。这意味着应该为每次测试运行进化。

在我的测试中,我使用的是h2 InMemory数据库。

我尝试在testApplication.conf中设置值:

play.evolutions.autoApply=true
play.evolutions.autoApplyDowns=true
evolutionplugin=enabled
applyEvolutions.default=true
applyDownEvolutions.default=true

没有成功。

我正在使用OneAppPerTest特性,因为我希望,这个特性会为每个测试用例重置数据库。 没有成功。

这是我的测试用例的设置:

class MyControllerTest extends FunSuite with OneAppPerTest with OptionValues with MockitoSugar { 

  implicit override def newAppForTest(td: TestData) = new GuiceApplicationBuilder()
    .configure(Map("ehcacheplugin" -> "disabled", "applyDownEvolutions.default" -> "true"))
    .build()
}

对于每个测试,我从Guice拿走控制器:

test("test 1") {
    val controller = app.injector.instanceOf[MyController]
    controller.changeDB // Change
}

当我在控制器上调用我的方法时,它将更改数据库。在我的第二个测试案例中,这种变化仍然存在。

请帮助。

1 个答案:

答案 0 :(得分:0)

好的,它适用于:

  1. 使用BeforeAndAfterEach特征

  2. 增强测试类
  3. 写一个方法:

  4. override def afterEach() {
      lazy val databaseApi = app.injector.instanceOf[DBApi]
      val db = databaseApi.database("default")
      Evolutions.cleanupEvolutions(
    }