斯卡拉玩 : How to inject test Database into Controller for testing

标签 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
  }
}

和这样的 Controller 示例,使用 Guice 注入(inject) Database:

class DataManagementController @Inject()(db: Database) extends Controller {...}

我想像上面那样测试这个新 Controller ,但注入(inject)一个测试内存数据库而不是“默认”。经过几个小时的尝试,我无法做到这一点。我在中找到了线索

(和外部 posts 使用 FakeApplication,尽管它们非常复杂,我更愿意遵循官方的当前版本的文档。)

据我所知,route(app, ...) 中使用了一个隐式应用参数,因此我尝试覆盖它:

尝试 1: (编译但仍然使用数据库“默认”)

class MySpec extends PlaySpec with OneAppPerSuite {

  implicit override lazy val app = new GuiceApplicationBuilder()
    .configure(inMemoryDatabase("test").build()

  "DataManagementController" should { ... }

尝试 2: (不编译:“无法解析符号‘TestDb’”)

class MySpec extends PlaySpec with OneAppPerSuite {

  val TestDb = Databases.inMemory(name="test")

  implicit override lazy val app = new GuiceApplicationBuilder()
    .overrides(bind[Database].to[TestDb]).build()

  "DataManagementController" should { ... }

我走在正确的轨道上吗?

最佳答案

应该不是问题,但您可以尝试:

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) {
   }
}

其中 appappBuilderGuiceApplicationBuilder

关于斯卡拉玩 : How to inject test Database into Controller for testing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39489368/

相关文章:

scala - 使用 UTF-8 编码在 Spark 中写入 CSV(德语字符)时出现问题

scala - 将信息保存到 Cassandra 不会保持顺序

scala - 修改 Scala AST 中的节点

scala - 在 Play 中通过 "activator run"运行时获取要编译的资源

performance - sbt 高 CPU 使用率与 ~run

java - Play Framework CSRF 错误 "[CSRF] Check failed because no token found in headers"

java - 是否可以使用 Guice 限制类型层次结构扫描?

scala - Scala 2.10中如何实现惰性val类变量?

java - 在添加自定义注释和 MethodInterceptor 时,EnhancerByGuice 生成的类导致 Dropwizard 出错

dependency-injection - 使用带有循环依赖的 Guice