繁体   English   中英

org.koin.android.error.MissingAndroidContextException:当尝试使用上下文测试应用程序时

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM