播放 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
我对 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