Как предоставить параметры в тесте на сухой ход Koin?

Моему ViewModel нужен repository & genre через конструктор. repository предоставляется Koin & genre строка предоставляется из активности

// Main app module
val MovieListModule: Module = applicationContext {

    // provide repository
    bean {
        DummyMovieListRepository() as MovieListRepository
    }

    // provides ViewModel
    viewModel { params: ParameterProvider ->
        MovieListViewModel(respository = get(), genre = params["key.genre"])
    }
}

//Module list for startKoin()
val appModules = listOf(MovieListModule)

//in activity
val viewModel = getViewModel<MovieListViewModel> {
   mapOf("key.genre" to "Action / Drama")
}

// dry run test which fails
class KoinDryRunTest : KoinTest {
    @Test
    fun dependencyGraphDryRun() {
        startKoin(list = appModules)
        dryRun()
    }
}

// some error log 
org.koin.error.MissingParameterException: Parameter 'key.genre' is missing
    at org.koin.dsl.context.ParameterHolder.get(ParameterHolder.kt:46)
org.koin.error.BeanInstanceCreationException: Can't create bean Factory[class=io.github.karadkar.popularmovies.MovieListViewModel, binds~(android.arch.lifecycle.ViewModel)] due to error :
    org.koin.error.MissingParameterException: Parameter 'key.genre' is missing

здесь неактивность инъекции Koin (v 0.9.3) работает должным образом, но тест на пробный запуск не проходит, так как он не может найти параметр key.genre. Проверить полный журнал ошибок

Есть ли способ имитировать / предоставить значение key.genre для пробного прогона?

полный исходный код приложения


person Rohit Karadkar    schedule 15.08.2018    source источник


Ответы (1)


как указал в Твиттере Арно Джулиани. dryRun принимает лямбда-функцию для параметров

class KoinDryRunTest : KoinTest {
    @Test
    fun dependencyGraphDryRun() {
        startKoin(list = appModules)
        dryRun() {
            mapOf("key.genre" to "dummy string")
        }
    }
}
person Rohit Karadkar    schedule 17.08.2018