我想为koin
. 我使用RoomDatabase
,它在构造函数中接收上下文。应用运行良好,但测试失败
无法解析应用程序实例。请在您的 KoinApplication 配置中使用 androidContext() 函数。
如果你想在你的模块中使用上下文,你应该在你的 start koin 方法中传递上下文
// start Koin!
startKoin {
// declare used Android context
androidContext(this@MyApplication)
// declare modules
modules(yourModule)
}
并使用这些库
// Koin AndroidX Scope features
implementation "org.koin:koin-android-scope:2.0.1"
// Koin AndroidX ViewModel features
implementation 'org.koin:koin-androidx-viewmodel:2.0.1'
// Koin AndroidX Experimental features
implementation "org.koin:koin-android-ext:2.0.1"
确保在开始 koin 时设置上下文。然后您应该能够通过模块中的 androidContext() 访问它。
startKoin {
androidContext(this@App)
modules(...)
...
}
对于单元测试,我已经实现了这个
@file:JvmName("KoinTest")
package com.myapp.di
import androidx.test.core.app.ApplicationProvider
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin
fun startKoin() {
startKoin {
androidContext(ApplicationProvider.getApplicationContext())
modules(listOf(applicationModule, networkModule))
}
}
fun stopKoin() {
org.koin.core.context.stopKoin()
}
我可以从我们旧的 Java 测试中调用它,KoinTest.startKoin()
或者只是startKoin()
在 Kotlin 中调用它。@Before
我适当地从and@After
块中调用这些。android 上下文是使用新的 AndroidX 测试库函数设置的。
就我而言,我将我的应用程序类编辑为:
class App : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@App)
modules(viewModelModule)
}
}
}
您无法使用 Koin 在单元测试中测试 Room。您只能在仪器测试中进行测试。