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 см. приведенную ссылку для более подробной информации.

В общем, есть три основных способа получить доступ к некоторым объектам в вашем тесте:

  • создание объектов вручную с использованием нового ключевого слова (не рекомендуется)
  • инъекция через инжектор, как показано здесь (либо инъекция объектов напрямую, либо инъекция поставщика / фабрики, которая может получить их для вас)
  • в случае модульного тестирования класса с некоторыми зависимостями, имитация этих зависимостей
Другие вопросы по тегам