如何修复 startKoin() 方法上的 NoSuchMethodError
How to fix NoSuchMethodError on startKoin() method
我正在尝试使用 Koin DI 帮助启动测试,就像示例中那样 https://insert-koin.io/docs/2.0/documentation/koin-core/index.html#_making_your_test_a_koincomponent_with_kointest or https://insert-koin.io/docs/2.0/getting-started/junit-test/
但每次都得到 NoSuchMethodError。我做错了什么?
首先,我使用了 main 包中已经创建的模块,但是出现了这个错误。然后我在 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.invoke(SignInTest.kt:79)
at net.app.at.features.signin.SignInTest$before.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.invoke(SignInTest.kt:36)
at net.app.at.features.signin.SignInTest$before.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 时 - 它起作用了。
我正在尝试使用 Koin DI 帮助启动测试,就像示例中那样 https://insert-koin.io/docs/2.0/documentation/koin-core/index.html#_making_your_test_a_koincomponent_with_kointest or https://insert-koin.io/docs/2.0/getting-started/junit-test/ 但每次都得到 NoSuchMethodError。我做错了什么?
首先,我使用了 main 包中已经创建的模块,但是出现了这个错误。然后我在 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.invoke(SignInTest.kt:79)
at net.app.at.features.signin.SignInTest$before.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.invoke(SignInTest.kt:36)
at net.app.at.features.signin.SignInTest$before.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 时 - 它起作用了。