scala - Play 2.5 + Slick + DI 问题

标签 scala playframework slick

我的 DAO 定义如下:

@Singleton
class MyDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile]  {

我有一个引用此 DAO 的集成测试:

class SomeIntegrationTest {
  lazy val someVal = new MyDAO
}

如何将 DatabaseConfigProvider 注入(inject) SomeIntegrationTest 中的 MyDAO 中?我无法在测试的构造函数中注入(inject)一个,因为测试类不采用构造函数参数。

最佳答案

您可以通过执行以下操作来注入(inject)依赖项

val dbConfigProvider = app.injector.instanceOf[DatabaseConfigProvider]

其中 app 是您的 FakeApplication 的实例。没有它,Play 就无法为您注入(inject)依赖项。您可以通过扩展 OneAppPerSuite 来获取 FakeApplication 实例,请参阅提供的链接了解更多详细信息。

一般来说,您可以通过三种主要方式来访问测试中的某些对象:

  • 使用 new 关键字手动创建对象(不被视为最佳实践)
  • 通过注入(inject)器进行注入(inject),如下所示(直接注入(inject)对象或注入(inject)可以为您获取对象的提供者/工厂)
  • 如果对具有某些依赖项的类进行单元测试,则具有这些依赖项 mocked

关于scala - Play 2.5 + Slick + DI 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36177139/

相关文章:

具有隐式参数的 Scala 设计模式(在 Scala 中 Play 2.x)

java - 类型类的工厂方法需要 Scala 设计建议

java - 玩2.3.x框架: How to decline all non application/json requests

java - Play Framework/Java : A good way to send x-www-form-urlencoded data back

database - 在Slick中,使用Table[T]需要什么导入?

database - Scala Slick/ScalaQuery BigDecimal 创建 decimal(10,0) 如何允许小数?

java - 导入JAR文件时出现`error: Could not deserialize`

Scala - 创建扩展密封抽象类的案例对象列表

json - 在 Play for Scala 中将异构列表与 Json 相互转换

Slick 3 从查询返回自定义案例类