簡體   English   中英

如何在Koin空運行測試中提供參數?

[英]How to provide parameters in Koin dry run test?

我的ViewModel需要通過構造函數進行repositorygenre 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 檢查完整的錯誤日志

有沒有辦法模擬/提供key.genre值以進行空轉測試?

完整的應用程序源

正如Arnaud Giuliani在Twitter上指出的那樣。 dryRun接受lambda函數作為參數

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM