我有一个带有 RobolectricTestRunner
的测试类,我用它来获取应用程序上下文,并且我还用 KoinComponent
扩展了一个类。当我开始测试时,它返回java.lang.IllegalStateException:KoinApplication尚未启动
并指向扩展KoinComponent
的类。我尝试在 setUp()
方法中启动 Koin 并加载模块并删除 Robolectric,但这样它无法找到应用程序上下文。有没有办法用 Robolectric 和 Koin 编写单元测试?
最佳答案
As you can read here在 AndroidManifest 中声明的 BroadcastReceivers
在应用程序的 onCreate
之前创建。因此,Koin尚未初始化。解决方法是为广播接收器创建一个帮助程序并惰性初始化该帮助程序:
class MyBroadcastReceiver : BroadcastReceiver() {
// Broadcast Receivers declared in the AndroidManifest get created before your Application's onCreate.
// The lazy initialization ensures that Koin is set up before the broadcast receiver is used
private val koinHelper: BroadcastReceiverHelper
by lazy { BroadcastReceiverHelper() }
override fun onReceive(context: Context, intent: Intent) {
koinHelper.onReceive(context, intent)
}
}
class BroadcastReceiverHelper : KoinComponent {
private val myClassToInject: MyClassToInject by inject()
fun onReceive(context: Context, intent: Intent) {
// do stuff here
}
}
关于android - 无法使用 RobolectricTestRunner 和 Koin 运行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57373568/