![](/img/trans.png)
[英]Koin Android: org.koin.error.NoBeanDefFoundException when Inject Repository
[英]org.koin.android.error.MissingAndroidContextException: when try to test app with context
我想为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()
或在 Kotlin 中仅startKoin()
。 我从@Before
和@After
块中适当地调用这些。 android 上下文是使用新的 AndroidX 测试库函数设置的。
您无法使用 Koin 在单元测试中测试 Room。 您只能在插装测试中进行测试。
就我而言,我将我的应用程序类编辑为:
class App : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@App)
modules(viewModelModule)
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.