我的 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/