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

时间:2019-05-27 19:55:44

标签: koin

我想为koin编写测试。我使用RoomDatabase,它在构造函数中接收上下文。应用程序运行良好,但测试失败

    Can't resolve Application instance. Please use androidContext() function in your KoinApplication configuration.

5 个答案:

答案 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)
        }
    }
}