播放 2.5 + Slick + THE Issue

Play 2.5 + Slick + DI Issue

我对 DAO 的定义如下:

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

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

class SomeIntegrationTest {
  lazy val someVal = new MyDAO
}

如何将 DatabaseConfigProvider 注入 SomeIntegrationTest 中的 MyDAO?我不能在测试的构造函数中注入一个,因为测试 类 不接受构造函数参数。

你可以通过

注入你的依赖
val dbConfigProvider = app.injector.instanceOf[DatabaseConfigProvider]

其中 app 是您的 FakeApplication 的一个实例。没有它,Play 就无法为您注入依赖性。您可以通过扩展 OneAppPerSuite 来获取 FakeApplication 的实例,请参阅提供的 link 以获取更多详细信息。

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

  • 使用 new 关键字手动创建对象(不认为是最佳实践)
  • 通过此处所示的注入器注入(直接注入对象或注入 provider/factory 可以为您获取它们)
  • 在单元测试的情况下 class 具有一些依赖性,具有这些依赖性 mocked