Koin Android Test

У меня проблема с коином и "androidTest". Поскольку androidTest запускает приложение, мне не нужно запускать Koin самостоятельно в тесте.

Теперь мне нужно внедрить фиктивный сервис. Проблема в том, что я внедряю внутри метода с get () внутри одноэлементного класса, и это не работает через внедрение конструктора, потому что внедренный объект может иметь разные реализации.

Моя идея заключалась в том, чтобы объявить то, что мне нужно, вот так:

declare {
        factory<Webservice>(override = true) { mockWebservice }
    }

Но это будет применяться ко всем тестам. Вот почему другой тест, который проверяет, был ли введен правильный класс, не удался.

Я также пытался использовать stopKoin (), startKoin (listOf (appModule)) в методе @After, но с этим внедрение зависимостей больше не работает в более поздних тестах.

Есть ли способ объявить макет только для одного теста?


person karuto    schedule 15.10.2018    source источник
comment
Итак, вы хотите объявить mockWebService только для этого теста?   -  person Rohit Karadkar    schedule 16.10.2018
comment
да, но похоже, что это невозможно без специального класса приложения для тестирования или чего-то в этом роде   -  person karuto    schedule 17.10.2018


Ответы (2)


Вот как я это делаю в своих тестах Android:

В родительском тестовом классе я использую эти методы для настройки и разборки:

@Before fun startKoinForTest() {
    if (GlobalContext.getOrNull() == null) {
        startKoin {
            androidLogger()
            androidContext(application)
            modules(appComponent)
        }
    }
}

@After fun stopKoinAfterTest() = stopKoin()

Мой компонент приложения содержит все модули, необходимые для дерева зависимостей.

Затем, когда я хочу имитировать зависимость для определенного теста, я использую что-то вроде этого:

declareMock<TripApi> { given(this.fetch(any())).willReturn(TestData.usaTrip) }

Вам нужно будет добавить новое объявление mock для каждого теста, если вы хотите заменить зависимость на mock.

person Sean Blahovici    schedule 20.11.2019