Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Play:如何将测试数据库注入控制器进行测试_Scala_Playframework_Guice - Fatal编程技术网

Scala Play:如何将测试数据库注入控制器进行测试

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

一个新的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: 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) {
   }
}