我想为koin编写测试。我使用RoomDatabase,它在构造函数中接收上下文。应用程序运行良好,但测试失败
Can't resolve Application instance. Please use androidContext() function in your KoinApplication configuration.
答案 0 :(得分:3)
如果要在模块中使用上下文,则应在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"
答案 1 :(得分:0)
启动koin时,请务必设置您的上下文。然后,您应该可以通过模块中的androidContext()访问它。
w1=false
while read line ;do
if [ "$line" ] ;then
if $w1 && [ -z "${line//*words*}" ] ;then
echo $line
break
fi
if [ -z "${line//*special*}" ] ;then w1=true ;fi
fi
done <file
答案 2 :(得分:0)
您无法使用Koin在单元测试中测试Room。您只能在仪器化测试中进行测试。
答案 3 :(得分:0)
对于单元测试,我已经实现了
@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()
或在Kotlin中仅称为startKoin()
。我从@Before
和@After
块中适当地调用它们。 android上下文是使用新的AndroidX测试库功能设置的。
答案 4 :(得分:0)
对于我来说,我将应用程序类编辑为:
class App : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@App)
modules(viewModelModule)
}
}
}