![](/img/trans.png)
[英]How to inject a mocked ViewModel in a RoboElectric test using Koin
[英]How to inject coroutine dispatcher in Unit Test - using Koin
我正在使用 Koin 將調度程序注入我的課程
使用 Koin 提取一類
class LogsWorker(
val context: Context,
workerParameters: WorkerParameters
) : CoroutineWorker(context, workerParameters), KoinComponent {
private val ioDispatcher: CoroutineDispatcher by inject()
}
koin模塊:
val appModule = module {
factory { provideIoDispatcher() }
}
private fun provideIoDispatcher(): CoroutineDispatcher = Dispatchers.IO
如果我想對我的 LogsWorker 類進行單元測試,我需要注入一個 coroutineTestDispatcher。 我怎么能那樣做? 我在任何地方都找不到任何例子。
您需要在測試中覆蓋該 bean 定義,當您加載時,您正在啟動 koin 並加載模塊。
你可以這樣做: factory(override = true) { provideYourTestingDispatcher }
在此處閱讀更多相關信息
盡管上述方法可行,但我發現使用構造函數注入更優雅,例如:
class LogsWorker(
val context: Context,
workerParameters: WorkerParameters,
private val ioDispatcher: CoroutineDispatcher
) : CoroutineWorker(context, workerParameters)
然后你可以在koin中指定LogsWorker
的定義,例如:
factory { (context: Context, workerParameters: WorkerParameters) -> LogsWorker(context, workerParameters, get()) }
在測試中,您只需傳入測試調度程序即可。 更多信息: https : //insert-koin.io/docs/reference/koin-core/injection-parameters#defining-an-injected-parameter
更新:不推薦使用override
,您可以使用KoinApplication.allowOverride(true)
代替
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.