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
в MyDAO
в тесте SomeIntegration? Я не могу внедрить один в конструктор теста, потому что тестовые классы не принимают параметры конструктора.
1 ответ
Решение
Вы можете ввести свою зависимость, выполнив
val dbConfigProvider = app.injector.instanceOf[DatabaseConfigProvider]
где app
это экземпляр вашего FakeApplication. Без этого Play не сможет заразить вас своей зависимостью. Вы можете получить экземпляр FakeApplication
расширяя OneAppPerSuite
см. приведенную ссылку для более подробной информации.
В общем, есть три основных способа получить доступ к некоторым объектам в вашем тесте:
- создание объектов вручную с использованием нового ключевого слова (не рекомендуется)
- инъекция через инжектор, как показано здесь (либо инъекция объектов напрямую, либо инъекция поставщика / фабрики, которая может получить их для вас)
- в случае модульного тестирования класса с некоторыми зависимостями, имитация этих зависимостей