Тест на Android - PullRequest
       36

Тест на Android

0 голосов
/ 15 октября 2018

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 17 октября 2018

Чтобы объявить макет только для одного теста, вы можете использовать loadKoinModules ()

Вы не можете вызывать функцию startKoin () более одного раза.Но вы можете напрямую использовать функции loadKoinModules ().

Таким образом, ваше определение будет переопределять значение по умолчанию

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

Также не забудьте реализовать интерфейс KoinTestв вашем тестовом классе

...