如何在 Koin dry 运行 测试中提供参数?
How to provide parameters in Koin dry run test?
我的 ViewModel
需要 repository
& genre
通过构造函数。 repository
由 Koin 提供 & genre
字符串由 activity
提供
// 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) injection inactivity 按预期工作,但干燥 运行 测试失败,因为它找不到参数 key.genre
。 Check full error-log
有什么办法mock/providekey.genre
值干运行测试吗?
正如 Arnaud Giuliani 在推特上指出的那样。 dryRun
接受参数的 lambda 函数
class KoinDryRunTest : KoinTest {
@Test
fun dependencyGraphDryRun() {
startKoin(list = appModules)
dryRun() {
mapOf("key.genre" to "dummy string")
}
}
}
我的 ViewModel
需要 repository
& genre
通过构造函数。 repository
由 Koin 提供 & genre
字符串由 activity
// 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) injection inactivity 按预期工作,但干燥 运行 测试失败,因为它找不到参数 key.genre
。 Check full error-log
有什么办法mock/providekey.genre
值干运行测试吗?
正如 Arnaud Giuliani 在推特上指出的那样。 dryRun
接受参数的 lambda 函数
class KoinDryRunTest : KoinTest {
@Test
fun dependencyGraphDryRun() {
startKoin(list = appModules)
dryRun() {
mapOf("key.genre" to "dummy string")
}
}
}