【发布时间】:2022-05-08 02:01:33
【问题描述】:
我想为koin 编写测试。我使用RoomDatabase,它在构造函数中接收上下文。应用运行良好,但测试失败
无法解析应用程序实例。请使用 androidContext() 在您的 KoinApplication 配置中运行。
【问题讨论】:
我想为koin 编写测试。我使用RoomDatabase,它在构造函数中接收上下文。应用运行良好,但测试失败
无法解析应用程序实例。请使用 androidContext() 在您的 KoinApplication 配置中运行。
【问题讨论】:
如果你想在你的模块中使用上下文,你应该在你的 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() 或在 Kotlin 中仅称为 startKoin()。我从@Before 和@After 块中适当地调用它们。 android 上下文是使用新的 AndroidX 测试库函数设置的。
【讨论】:
您无法使用 Koin 在单元测试中测试 Room。您只能在仪器测试中进行测试。
【讨论】:
就我而言,我将应用程序类编辑为:
class App : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@App)
modules(viewModelModule)
}
}
}
【讨论】:
KOIN:3.2.0-beta-1
// Koin Core features
implementation "io.insert-koin:koin-core:3.2.0-beta-1"
implementation "io.insert-koin:koin-android:3.2.0-beta-1"
在 startkoin 下声明上下文,如下所示
androidContext(this@KoinSampleApplication)
class KoinSampleApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoinDI()
}
private fun startKoinDI() {
startKoin {
// declare context
androidContext(this@KoinSampleApplication)
// declare modules
modules(
networkModule,
repositoryModule,
servicesModule,
utilityModule,
viewModelModule,
)
}
}
}
希望它会起作用。
【讨论】: