У меня есть несколько тестовых классов с несколькими тестами в каждом классе.
В каждом классе я хочу убедиться, что я получаю новые тестовые зависимости для каждого теста. Поэтому я готовлю свои тесты так:
@Before
fun initTest() {
loadKoinModules(listOf(module {
scope(TEST_SCOPE, override = true) { Dependency1() }
scope(TEST_SCOPE, override = true) { Dependency2() }
}))
getKoin().createScope(TEST_SCOPE)
}
@After
fun shutdown() {
getKoin().getScope(TEST_SCOPE).close()
}
И это работает очень хорошо, когда я запускаю только тесты в этом конкретном классе тестирования.
Но когда я запускаю все свои тесты в одно и то же время, и если несколько классов тестов имеют одинаковые зависимости в своих модулях, я получаю следующее исключение:
org.koin.error.DependencyResolutionException: Multiple definitions found - Koin can't choose between :
Scope [name='Dependency2',class='package.Dependency2']
Scope [name='Dependency2',class='package.Dependency2']
Check your modules definition, use inner modules visibility or definition names.
Итак, я исправил это, просто вызвав stopKoin()
в конце моего метода выключения.
И до сих пор я не заметил, что мои тесты работают намного медленнее. Итак, в основном мой вопрос: это предпочтительный способ использовать Koin в моих тестах? Я что-то упустил или не использую Коин должным образом?
Я понимаю, что это больше вопрос о проверке кода / рекомендации, чем реальная проблема, но я думаю, что он все еще может быть полезен для других.
Спасибо