Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MyClass$MockitoMock$ must be defined in the same package MyClass/package #424

Open
CluEleSsUK opened this issue Mar 29, 2021 · 2 comments
Open

Comments

@CluEleSsUK
Copy link

I'm trying to mock a simple interface in my Kotlin project, but receiving the following error:

Mockito cannot mock this class: interface MyInterface.

Mockito can only mock non-private & non-final classes.
If you're not sure why you're getting this error, please report to the mailing list.


Java               : 14
JVM vendor name    : AdoptOpenJDK
JVM vendor version : 14.0.2+12
JVM name           : OpenJDK 64-Bit Server VM
JVM version        : 14.0.2+12
JVM info           : mixed mode, sharing
OS name            : Mac OS X
OS version         : 10.15.7


Underlying exception : java.lang.IllegalArgumentException: MyInterface$MockitoMock$1283026015 must be defined in the same package as MyInterface/package
org.mockito.exceptions.base.MockitoException:
Mockito cannot mock this class: interface MyInterface.

Mockito can only mock non-private & non-final classes.
If you're not sure why you're getting this error, please report to the mailing list.


Java               : 14
JVM vendor name    : AdoptOpenJDK
JVM vendor version : 14.0.2+12
JVM name           : OpenJDK 64-Bit Server VM
JVM version        : 14.0.2+12
JVM info           : mixed mode, sharing
OS name            : Mac OS X
OS version         : 10.15.7


Underlying exception : java.lang.IllegalArgumentException: MyInterface$MockitoMock$1283026015 must be defined in the same package as MyInterface/package
  at cluelessuk.MyInterfaceTest.<init>(MyInterfaceTest.kt:127)
  at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
  at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
  at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:250)
  at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:260)
  at org.junit.runners.BlockJUnit4ClassRunner$2.runReflectiveCall(BlockJUnit4ClassRunner.java:309)
  at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
  at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:306)
  at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
  at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
  at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
  at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
  at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
  at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
  at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
-- VISUAL --
  at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.base/java.lang.reflect.Method.invoke(Method.java:564)
  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 com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
  at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.base/java.lang.reflect.Method.invoke(Method.java:564)
  at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
  at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
  at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
  at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
  at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
  at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
  at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
  at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
  at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.IllegalArgumentException: MyInterface$MockitoMock$1283026015 must be defined in the same package as MyInterface/package
  at net.bytebuddy.dynamic.loading.ClassInjector$UsingLookup.injectRaw(ClassInjector.java:1372)
  at net.bytebuddy.dynamic.loading.ClassInjector$AbstractBase.inject(ClassInjector.java:93)
  at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$UsingLookup.load(ClassLoadingStrategy.java:451)
  at net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:85)
  at net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:5468)
  at org.mockito.internal.creation.bytebuddy.SubclassBytecodeGenerator.mockClass(SubclassBytecodeGenerator.java:129)
  at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator$1.call(TypeCachingBytecodeGenerator.java:37)
  at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator$1.call(TypeCachingBytecodeGenerator.java:34)
  at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:137)
  at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:350)
  at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:159)
  at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:361)
  at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator.mockClass(TypeCachingBytecodeGenerator.java:32)
  at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMockType(SubclassByteBuddyMockMaker.java:71)
  at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMock(SubclassByteBuddyMockMaker.java:42)
  at org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker.createMock(ByteBuddyMockMaker.java:25)
  at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:35)
  at org.mockito.internal.MockitoCore.mock(MockitoCore.java:69)
  at org.mockito.Mockito.mock(Mockito.java:1895)
  ... 52 more


cluelessuk.MyInterfaceTest > client registers with the first available rendezvous node for a given recipient FAILED
    org.mockito.exceptions.base.MockitoException at SomeTest .kt:127
        Caused by: java.lang.IllegalArgumentException at SomeTest.kt:127
1 test completed, 1 failed
FAILURE: Build failed with an exception.

I'm using org.mockito.kotlin:mockito-kotlin:2.2.10 and my interface is indeed in the same package as the test. I have also tried inline mockmaker

@bohsen
Copy link

bohsen commented Apr 5, 2021

@CluEleSsUK Could you post the test also?

@CluEleSsUK
Copy link
Author

CluEleSsUK commented Apr 7, 2021

Sorry, I ended up switching things to mockK, so no longer have the test - it was fairly mickey mouse though!
Something to the effect of:

val mock = mock(MyInterface::class)
val objectUnderTest = Thing(mock)
given(mock.someFn(any()).thenReturn("1234")
val result = objectUnderTest.start()
assertTrue(result)

Some things I tried:

  • inline mock-maker
  • all-open plugin
  • spring-all-open
  • using a slightly older version of mockito and mockito-kotlin
  • trying different java versions (8 and 14)

Sorry I can't provide you any more info!
Feel free to close if you think there's nothing more that can be done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants