Open csbiggar opened 3 years ago
I raised this in micronaut-core because it was a change in the bom version that first made the issue apparent. In our real application (which I can't share sorry!) we include the bom and micronaut-test as a separate dependency, and changing the version of that didn't help. I can try to recreate that exact setup in the example project but there didn't seem much point when the bug shows up with the simpler config.
A similar situation is happening for google's Storage class.
This works in micronaut 2.2.1:
import com.google.cloud.storage.Storage
// ...
@Inject
lateinit var storage: Storage
@MockBean(Storage::class)
fun createStorage(): Storage {
return mockk()
}
But in 2.5.4, we have to use:
@Factory
@Requires(env = ["test"])
class MockStorageFactory {
@Singleton
fun createStorageInTest(): Storage {
return mockk(relaxed = true)
}
}
After some digging around, i think i found the cause of the issue, take this setup for example:
@Singleton
class TestClass {
fun testFun(a: Array<Any>): Any = TODO()
fun testFun(a: Any): Unit = TODO()
}
It seems like the generated BeanDefinitionReference is missing the second function, only the function thats passing an array is included in its function metadata, and when "comparing functions when proxying"(not sure whats going on under the hood) then the function is missing from the BeanDefinitionReference.
I this specific example i used Any
but this issue occures on every type, aslong as the return types are different and one function gets an array of the same type as the other function.
When Mocking this class, we get the same error:
No such method [testFun(java.lang.Object) ] for bean [TestClass]
java.lang.NoSuchMethodException: No such method [testFun(java.lang.Object) ] for bean [TestClass]
at io.micronaut.context.ExecutionHandleLocator.lambda$getProxyTargetMethod$3(ExecutionHandleLocator.java:225)
at java.base/java.util.Optional.orElseThrow(Optional.java:403)
at io.micronaut.context.ExecutionHandleLocator.getProxyTargetMethod(ExecutionHandleLocator.java:224)
at com.walmart.zeekit.$GoogleCloudServiceTest$Storage0$Definition$Intercepted.<init>(Unknown Source)
at com.walmart.zeekit.$GoogleCloudServiceTest$Storage0$Definition$Intercepted$Definition.build(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2354)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2305)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2251)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3016)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2890)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2800)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1617)
at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:66)
at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2065)
at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1297)
at com.walmart.zeekit.$GoogleCloudServiceTest$Definition.build(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2354)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2305)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2251)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3016)
at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at io.micronaut.context.DefaultBeanContext.findOrCreateSingletonBeanRegistration(DefaultBeanContext.java:2918)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2879)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2800)
at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1680)
at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1655)
at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:878)
at io.micronaut.context.BeanLocator.findBean(BeanLocator.java:291)
at io.micronaut.test.extensions.kotest5.MicronautKotest5Context.<init>(MicronautKotest5Context.kt:42)
at io.micronaut.test.extensions.kotest5.MicronautKotest5Extension.instantiate(MicronautKotest5Extension.kt:93)
at io.kotest.engine.spec.InstantiateSpecKt.createAndInitializeSpec(instantiateSpec.kt:30)
at io.kotest.engine.spec.InstantiateSpecKt.instantiate(instantiateSpec.kt:11)
at io.kotest.engine.spec.SpecRefKt.instance(SpecRef.kt:14)
at io.kotest.engine.spec.SpecExecutor.createInstance-gIAlu-s(SpecExecutor.kt:128)
at io.kotest.engine.spec.SpecExecutor.access$createInstance-gIAlu-s(SpecExecutor.kt:49)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$innerExecute$1.invokeSuspend(SpecExecutor.kt:86)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$innerExecute$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$innerExecute$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.FinalizeSpecInterceptor.intercept-0E7RQCE(FinalizeSpecInterceptor.kt:19)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.PrepareSpecInterceptor.intercept-0E7RQCE(PrepareSpecInterceptor.kt:20)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.ApplyExtensionsInterceptor.intercept-0E7RQCE(ApplyExtensionsInterceptor.kt:35)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.SpecFinishedInterceptor.intercept-0E7RQCE(SpecFinishedInterceptor.kt:21)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.SpecStartedInterceptor.intercept-0E7RQCE(SpecStartedInterceptor.kt:19)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.SpecRefExtensionInterceptor$intercept$inner$1.invokeSuspend(SpecRefExtensionInterceptor.kt:27)
at io.kotest.engine.spec.interceptor.SpecRefExtensionInterceptor$intercept$inner$1.invoke(SpecRefExtensionInterceptor.kt)
at io.kotest.engine.spec.interceptor.SpecRefExtensionInterceptor$intercept$inner$1.invoke(SpecRefExtensionInterceptor.kt)
at io.kotest.engine.spec.interceptor.SpecRefExtensionInterceptor.intercept-0E7RQCE(SpecRefExtensionInterceptor.kt:30)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.RequiresTagSpecInterceptor.intercept-0E7RQCE(RequiresTagSpecInterceptor.kt:35)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.TagsExcludedSpecInterceptor.intercept-0E7RQCE(TagsExcludedDiscoveryExtension.kt:32)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.SystemPropertySpecFilterInterceptor.intercept-0E7RQCE(SystemPropertySpecFilterInterceptor.kt:49)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.SpecFilterInterceptor.intercept-0E7RQCE(SpecFilterInterceptor.kt:37)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.IgnoredSpecInterceptor.intercept-0E7RQCE(IgnoredSpecInterceptor.kt:52)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.interceptor.EnabledIfSpecInterceptor.intercept-0E7RQCE(EnabledIfSpecInterceptor.kt:40)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at io.kotest.engine.spec.SpecExecutor.referenceInterceptors(SpecExecutor.kt:92)
at io.kotest.engine.spec.SpecExecutor.execute(SpecExecutor.kt:61)
at io.kotest.engine.ConcurrentTestSuiteScheduler$schedule$8$1$2.invokeSuspend(ConcurrentTestSuiteScheduler.kt:73)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:284)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38)
at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
at io.kotest.common.RunBlockingKt.runBlocking(runBlocking.kt:3)
at io.kotest.engine.TestEngineLauncher.launch(TestEngineLauncher.kt:193)
at io.kotest.runner.junit.platform.KotestJunitPlatformTestEngine.execute(KotestJunitPlatformTestEngine.kt:82)
at io.kotest.runner.junit.platform.KotestJunitPlatformTestEngine.execute(KotestJunitPlatformTestEngine.kt:46)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Error instantiating bean of type [com.walmart.zeekit.GoogleCloudServiceTest]
Message: No such method [testFun(java.lang.Object) ] for bean [TestClass]
Path Taken: new GoogleCloudServiceTest(TestClass testClass) --> new GoogleCloudServiceTest([TestClass testClass])
io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type [com.walmart.zeekit.GoogleCloudServiceTest]
Message: No such method [testFun(java.lang.Object) ] for bean [TestClass]
Path Taken: new GoogleCloudServiceTest(TestClass testClass) --> new GoogleCloudServiceTest([TestClass testClass])
at app//io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2367)
at app//io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2305)
at app//io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2251)
at app//io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3016)
at app//io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2890)
at app//io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2800)
at app//io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1617)
at app//io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:66)
at app//io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2065)
at app//io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1297)
at app//com.walmart.zeekit.$GoogleCloudServiceTest$Definition.build(Unknown Source)
at app//io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2354)
at app//io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2305)
at app//io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2251)
at app//io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3016)
at app//io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at app//io.micronaut.context.DefaultBeanContext.findOrCreateSingletonBeanRegistration(DefaultBeanContext.java:2918)
at app//io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2879)
at app//io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2800)
at app//io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1680)
at app//io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1655)
at app//io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:878)
at app//io.micronaut.context.BeanLocator.findBean(BeanLocator.java:291)
at app//io.micronaut.test.extensions.kotest5.MicronautKotest5Context.<init>(MicronautKotest5Context.kt:42)
at app//io.micronaut.test.extensions.kotest5.MicronautKotest5Extension.instantiate(MicronautKotest5Extension.kt:93)
at app//io.kotest.engine.spec.InstantiateSpecKt.createAndInitializeSpec(instantiateSpec.kt:30)
at app//io.kotest.engine.spec.InstantiateSpecKt.instantiate(instantiateSpec.kt:11)
at app//io.kotest.engine.spec.SpecRefKt.instance(SpecRef.kt:14)
at app//io.kotest.engine.spec.SpecExecutor.createInstance-gIAlu-s(SpecExecutor.kt:128)
at app//io.kotest.engine.spec.SpecExecutor.access$createInstance-gIAlu-s(SpecExecutor.kt:49)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$innerExecute$1.invokeSuspend(SpecExecutor.kt:86)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$innerExecute$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$innerExecute$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.FinalizeSpecInterceptor.intercept-0E7RQCE(FinalizeSpecInterceptor.kt:19)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.PrepareSpecInterceptor.intercept-0E7RQCE(PrepareSpecInterceptor.kt:20)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.ApplyExtensionsInterceptor.intercept-0E7RQCE(ApplyExtensionsInterceptor.kt:35)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.SpecFinishedInterceptor.intercept-0E7RQCE(SpecFinishedInterceptor.kt:21)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.SpecStartedInterceptor.intercept-0E7RQCE(SpecStartedInterceptor.kt:19)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.SpecRefExtensionInterceptor$intercept$inner$1.invokeSuspend(SpecRefExtensionInterceptor.kt:27)
at app//io.kotest.engine.spec.interceptor.SpecRefExtensionInterceptor$intercept$inner$1.invoke(SpecRefExtensionInterceptor.kt)
at app//io.kotest.engine.spec.interceptor.SpecRefExtensionInterceptor$intercept$inner$1.invoke(SpecRefExtensionInterceptor.kt)
at app//io.kotest.engine.spec.interceptor.SpecRefExtensionInterceptor.intercept-0E7RQCE(SpecRefExtensionInterceptor.kt:30)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.RequiresTagSpecInterceptor.intercept-0E7RQCE(RequiresTagSpecInterceptor.kt:35)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.TagsExcludedSpecInterceptor.intercept-0E7RQCE(TagsExcludedDiscoveryExtension.kt:32)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.SystemPropertySpecFilterInterceptor.intercept-0E7RQCE(SystemPropertySpecFilterInterceptor.kt:49)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.SpecFilterInterceptor.intercept-0E7RQCE(SpecFilterInterceptor.kt:37)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.IgnoredSpecInterceptor.intercept-0E7RQCE(IgnoredSpecInterceptor.kt:52)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.interceptor.EnabledIfSpecInterceptor.intercept-0E7RQCE(EnabledIfSpecInterceptor.kt:40)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invokeSuspend(SpecExecutor.kt:91)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor$referenceInterceptors$3$1.invoke(SpecExecutor.kt)
at app//io.kotest.engine.spec.SpecExecutor.referenceInterceptors(SpecExecutor.kt:92)
at app//io.kotest.engine.spec.SpecExecutor.execute(SpecExecutor.kt:61)
at app//io.kotest.engine.ConcurrentTestSuiteScheduler$schedule$8$1$2.invokeSuspend(ConcurrentTestSuiteScheduler.kt:73)
at app//kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at app//kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at app//kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:284)
at app//kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85)
at app//kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
at app//kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
at app//kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38)
at app//kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
at app//io.kotest.common.RunBlockingKt.runBlocking(runBlocking.kt:3)
at app//io.kotest.engine.TestEngineLauncher.launch(TestEngineLauncher.kt:193)
at app//io.kotest.runner.junit.platform.KotestJunitPlatformTestEngine.execute(KotestJunitPlatformTestEngine.kt:82)
at app//io.kotest.runner.junit.platform.KotestJunitPlatformTestEngine.execute(KotestJunitPlatformTestEngine.kt:46)
at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
at app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
at app//org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
at app//org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
at app//org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
at app//org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
at java.base@17.0.5/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base@17.0.5/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base@17.0.5/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base@17.0.5/java.lang.reflect.Method.invoke(Method.java:568)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Caused by: java.lang.NoSuchMethodException: No such method [testFun(java.lang.Object) ] for bean [TestClass]
at io.micronaut.context.ExecutionHandleLocator.lambda$getProxyTargetMethod$3(ExecutionHandleLocator.java:225)
at java.base/java.util.Optional.orElseThrow(Optional.java:403)
at io.micronaut.context.ExecutionHandleLocator.getProxyTargetMethod(ExecutionHandleLocator.java:224)
at com.walmart.zeekit.$GoogleCloudServiceTest$Storage0$Definition$Intercepted.<init>(Unknown Source)
at com.walmart.zeekit.$GoogleCloudServiceTest$Storage0$Definition$Intercepted$Definition.build(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2354)
... 130 more
com.walmart.zeekit.GoogleCloudServiceTest > BeanInstantiationException FAILED
java.lang.NoSuchMethodException at ExecutionHandleLocator.java:225
com.walmart.zeekit.GoogleCloudServiceTest > executionError FAILED
io.micronaut.context.exceptions.BeanInstantiationException at DefaultBeanContext.java:2367
Caused by: java.lang.NoSuchMethodException at ExecutionHandleLocator.java:225
Steps to Reproduce
See README of https://github.com/csbiggar/micronaut-mockbean-issue for full steps / an example which will recreate this issue, but in summary
Add a
@Factory
which creates acom.google.cloud.datastore.Datastore
implementationIn a
@MicronautTest
, mock Datastore as followsRun the test (via your IDE or using
./gradlew test
)Expected Behaviour
Test should inject a mockk mock Datastore and pass
Actual Behaviour
Test fails with
Full stack trace here: test-failure-stacktrace.txt
Environment Information
Example Application
https://github.com/csbiggar/micronaut-mockbean-issue - details in the readme
Note - workaround
If I create another
@Factory
in src.test that creates a mockk Datastore and comes into play for@Requires(env = ["test"])
, and use that rather than @Mockbean, the test works. See README of example project for steps to see that in the example project too.