4

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

无法解析应用程序实例。请在您的 KoinApplication 配置中使用 androidContext() 函数。

4

5 回答 5

6

如果你想在你的模块中使用上下文,你应该在你的 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"
于 2019-06-03T11:30:46.973 回答
3

确保在开始 koin 时设置上下文。然后您应该能够通过模块中的 androidContext() 访问它。

startKoin {
    androidContext(this@App)
    modules(...)
    ...
}
于 2019-05-31T06:12:47.167 回答
2

对于单元测试,我已经实现了这个

@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()或者只是startKoin()在 Kotlin 中调用它。@Before我适当地从and@After块中调用这些。android 上下文是使用新的 AndroidX 测试库函数设置的。

于 2019-10-02T13:58:43.597 回答
1

就我而言,我将我的应用程序类编辑为:

class App : Application() {
    override fun onCreate() {
        super.onCreate()

        startKoin {

            androidContext(this@App)

            modules(viewModelModule)
        }
    }
}
于 2019-12-13T21:09:16.050 回答
1

您无法使用 Koin 在单元测试中测试 Room。您只能在仪器测试中进行测试。

于 2019-07-15T11:42:05.943 回答