在 Play 中为 OneAppPerTest 中的每个测试重新创建数据库并进化
Posted
技术标签:
【中文标题】在 Play 中为 OneAppPerTest 中的每个测试重新创建数据库并进化【英文标题】:Recreate database in Play with evolution for each test in OneAppPerTest 【发布时间】:2016-03-09 16:06:56 【问题描述】:我正在使用 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 trait,因为我希望这个 trait 会为每个测试用例重置数据库。 没有成功。
这是我的测试用例设置:
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】:好的,它适用于:
使用BeforeAndAfterEach
trait 增强测试类
写一个方法:
override def afterEach() lazy val databaseApi = app.injector.instanceOf[DBApi] val db = databaseApi.database("default") Evolutions.cleanupEvolutions(
【讨论】:
以上是关于在 Play 中为 OneAppPerTest 中的每个测试重新创建数据库并进化的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Play 商店中为您的应用手动下载扩展 (obb) 文件?
未针对某些内部用户在 Play 商店中为 Alpha 测试人员更新应用程序
在 Play Framework 2.4 中为 Scala 实现 Akka