android - 如何修复 startKoin() 方法上的 NoSuchMethodError

标签 android unit-testing testing kotlin koin

我正在尝试使用 Koin DI 帮助启动测试,如示例 https://insert-koin.io/docs/2.0/documentation/koin-core/index.html#_making_your_test_a_koincomponent_with_kointest 所示或https://insert-koin.io/docs/2.0/getting-started/junit-test/ 但每次都会收到NoSuchMethodError。我做错了什么?

首先,我使用了 ma​​in 包中已创建的模块,但出现了此错误。然后我在 test 包中创建了模块,但错误仍然相同。

我的代码

class ComponentA
class ComponentB(val a: ComponentA)

class SignInTest : KoinTest {

    val componentB : ComponentB by inject()

    @Before
    fun before() {
        startKoin { modules(
            module {
                single { ComponentA() }
                single { ComponentB(get()) }
            }) }
    }

    @Test
    fun test_test() {
        val componentA = get<ComponentA>()

        assertNotNull(componentA)
        assertEquals(componentA, componentB.a)
    }

    @After
    fun after() {
        stopKoin()
    }

java.lang.NoSuchMethodError: org.koin.core.definition.BeanDefinition.(Lorg/koin/core/qualifier/Qualifier;Lorg/koin/core/qualifier/Qualifier;Lkotlin/reflect/KClass;)V

at net.app.at.features.signin.SignInTest$before$1$1.invoke(SignInTest.kt:79)
at net.app.at.features.signin.SignInTest$before$1$1.invoke(SignInTest.kt:26)
at org.koin.dsl.ModuleKt.module(Module.kt:31)
at org.koin.dsl.ModuleKt.module$default(Module.kt:29)
at net.app.at.features.signin.SignInTest$before$1.invoke(SignInTest.kt:36)
at net.app.at.features.signin.SignInTest$before$1.invoke(SignInTest.kt:26)
at org.koin.core.context.GlobalContextKt.startKoin(GlobalContext.kt:72)
at net.app.at.features.signin.SignInTest.before(SignInTest.kt:35)

最佳答案

请检查您正在使用的 Koin 库的版本。

我也遇到了同样的问题。事实证明,我的 build.gradle 中有:

implementation "org.koin:koin-android:2.0.0-beta-1" 

以及下面几行:

testImplementation "org.koin:koin-test:2.0.0"

当我在两个地方设置版本 2.0.0 时 - 它起作用了。

关于android - 如何修复 startKoin() 方法上的 NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56600193/

相关文章:

android - 如何在 Android 中并排显示两个图像?

android - 如何使用动画从下到上隐藏 View

java - 是否可以通过蓝牙从麦克风接收音频并从设备播放音频?

java - Mockito + Spring + @PostConstruct,mock初始化错误,为什么调用@PostConstruct?

c++ - 数值回归测试

Android - 省略并截断 TextView 中的所有长网址

ruby-on-rails - 如何编写一个任务来在 Rails 3 中运行测试?

c# - Mock 不包含 Setup 的定义

c# - 如何告诉 unit ms test 从子文件夹而不是 root 中获取 CSV 文件?

android - 机器人最佳实践。 clickOnView 与 clickOnButton