Scala Play:如何将测试数据库注入控制器进行测试
一个新的scala play项目(v2.5.6)从以下测试示例开始:Scala Play:如何将测试数据库注入控制器进行测试,scala,playframework,guice,Scala,Playframework,Guice,一个新的scala play项目(v2.5.6)从以下测试示例开始: "HomeController" should { "render the index page" in { val home = route(app, FakeRequest(GET, "/")).get status(home) mustBe OK } } 控制器示例如下,使用Guice注入数据库: class DataManagementController @Inject()(db: Data
"HomeController" should {
"render the index page" in {
val home = route(app, FakeRequest(GET, "/")).get
status(home) mustBe OK
}
}
控制器示例如下,使用Guice注入数据库
:
class DataManagementController @Inject()(db: Database) extends Controller {...}
我想如上所述测试这个新控制器,但在内存数据库中注入一个测试,而不是“默认”。经过几个小时的努力,我无法做到这一点。我发现了一些线索
- ,
伪造应用程序
,尽管它们非常复杂,我更愿意遵循官方的、当前版本的文档。)
由此我了解到在route(app,…)
中使用了一个隐式app
参数,因此我尝试覆盖它:
尝试1:
(编译但仍使用数据库“默认值”)
尝试2:
(未编译:“无法解析符号“TestDb”)
我走对了吗?应该不是问题,但你可以试试:
implicit override lazy val app = new GuiceApplicationBuilder()
.overrides(bind(classOf[Database]).to(classOf[TestDb]).build()
而不是
implicit override lazy val app = new GuiceApplicationBuilder()
.overrides(bind[Database].to[TestDb]).build()
和/或
"" should {
"" in new App(appBuilder) {
}
}
其中appappBuilder
是GuiceApplicationBuilder
implicit override lazy val app = new GuiceApplicationBuilder()
.overrides(bind[Database].to[TestDb]).build()
"" should {
"" in new App(appBuilder) {
}
}