mockito icon indicating copy to clipboard operation
mockito copied to clipboard

Mockito tests not running with Spring boot 3.1.X and java17

Open aravinds502 opened this issue 2 years ago • 14 comments

Hello Team,

Recently we upgraded our project dependencies from Spring boot 2.5.X to 3.1.4, and Java11 to Java17 and found all the test cases in which we used mocks failed as follows.

Here is the test I'm running

Testcase:

@ExtendWith(MockitoExtension.class) @ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) public class UserGroupTest {

@InjectMocks private UserAndGroupService userAndGroupService;

@Mock
private UserRepository userRepository;

@Test
public void hasUsersTrue() {
    when(userRepository.count()).thenReturn(1L);

    assertThat(userAndGroupService.hasUsers()).isTrue();
}

}

The actual implementation of User Group service is as follows

Implementation:

@Service public class UserAndGroupService {

private final UserRepository userRepository;

public boolean hasUsers() { return userRepository.count() > 0; }

}

@Repository public interface UserRepository extends JpaRepository<UserEntity, Long> { }

while running the test "hasUsersTrue" I'm seeing the following error

Error:

org.mockito.exceptions.base.MockitoException: Mockito cannot mock this class: interface com.rapidminer.data.catalog.backend.repository.access.UserRepository.

If you're not sure why you're getting this error, please open an issue on GitHub.

Java : 17 JVM vendor name : Oracle Corporation JVM vendor version : 17+35-2724 JVM name : OpenJDK 64-Bit Server VM JVM version : 17+35-2724 JVM info : mixed mode, sharing OS name : Windows 10 OS version : 10.0

You are seeing this disclaimer because Mockito is configured to create inlined mocks. You can learn about inline mocks and their limitations under item #39 of the Mockito class javadoc.

Underlying exception : org.mockito.exceptions.base.MockitoException: Could not modify all classes [interface com.rapidminer.data.catalog.backend.repository.access.UserRepository, interface org.springframework.data.jpa.repository.JpaRepository, interface org.springframework.data.repository.Repository, interface org.springframework.data.repository.CrudRepository, interface org.springframework.data.repository.query.QueryByExampleExecutor, interface org.springframework.data.repository.ListPagingAndSortingRepository, interface org.springframework.data.repository.PagingAndSortingRepository, interface org.springframework.data.repository.ListCrudRepository] at app//org.mockito.junit.jupiter.MockitoExtension.beforeEach(MockitoExtension.java:153) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeEachCallbacks$2(TestMethodTestDescriptor.java:166) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeMethodsOrCallbacksUntilExceptionOccurs$6(TestMethodTestDescriptor.java:202) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(TestMethodTestDescriptor.java:202) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeEachCallbacks(TestMethodTestDescriptor.java:165) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:132) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base@17/java.util.ArrayList.forEach(ArrayList.java:1511) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base@17/java.util.ArrayList.forEach(ArrayList.java:1511) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) 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:62) at java.base@17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base@17/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base@17/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.proxy2/jdk.proxy2.$Proxy5.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:113) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65) 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) Suppressed: java.lang.NullPointerException: Cannot invoke "java.util.Set.forEach(java.util.function.Consumer)" because the return value of "org.junit.jupiter.api.extension.ExtensionContext$Store.remove(Object, java.lang.Class)" is null at org.mockito.junit.jupiter.MockitoExtension.afterEach(MockitoExtension.java:184) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAfterEachCallbacks$12(TestMethodTestDescriptor.java:260) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$13(TestMethodTestDescriptor.java:276) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$14(TestMethodTestDescriptor.java:276) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAllAfterMethodsOrCallbacks(TestMethodTestDescriptor.java:275) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAfterEachCallbacks(TestMethodTestDescriptor.java:259) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:144) ... 63 more Caused by: org.mockito.exceptions.base.MockitoException: Could not modify all classes [interface com.rapidminer.data.catalog.backend.repository.access.UserRepository, interface org.springframework.data.jpa.repository.JpaRepository, interface org.springframework.data.repository.Repository, interface org.springframework.data.repository.CrudRepository, interface org.springframework.data.repository.query.QueryByExampleExecutor, interface org.springframework.data.repository.ListPagingAndSortingRepository, interface org.springframework.data.repository.PagingAndSortingRepository, interface org.springframework.data.repository.ListCrudRepository] at app//net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:153) at app//net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:366) at app//net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:175) at app//net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:377) ... 70 more Caused by: java.lang.IllegalStateException: Byte Buddy could not instrument all classes within the mock's type hierarchy

This problem should never occur for javac-compiled classes. This problem has been observed for classes that are:

  • Compiled by older versions of scalac
  • Classes that are part of the Android distribution at org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator.triggerRetransformation(InlineBytecodeGenerator.java:285) at org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator.mockClass(InlineBytecodeGenerator.java:218) at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator.lambda$mockClass$0(TypeCachingBytecodeGenerator.java:47) at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:153) at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:366) at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:175) at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:377) at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator.mockClass(TypeCachingBytecodeGenerator.java:40) at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.createMockType(InlineDelegateByteBuddyMockMaker.java:396) at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.doCreateMock(InlineDelegateByteBuddyMockMaker.java:355) at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.createMock(InlineDelegateByteBuddyMockMaker.java:334) at org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker.createMock(InlineByteBuddyMockMaker.java:56) at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:99) at org.mockito.internal.MockitoCore.mock(MockitoCore.java:88) at org.mockito.Mockito.mock(Mockito.java:2101) at org.mockito.internal.configuration.MockAnnotationProcessor.processAnnotationForMock(MockAnnotationProcessor.java:79) at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:28) at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:25) at org.mockito.internal.configuration.IndependentAnnotationEngine.createMockFor(IndependentAnnotationEngine.java:44) at org.mockito.internal.configuration.IndependentAnnotationEngine.process(IndependentAnnotationEngine.java:72) at org.mockito.internal.configuration.InjectingAnnotationEngine.processIndependentAnnotations(InjectingAnnotationEngine.java:73) at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:47) at org.mockito.MockitoAnnotations.openMocks(MockitoAnnotations.java:81) at org.mockito.internal.framework.DefaultMockitoSession.(DefaultMockitoSession.java:43) at org.mockito.internal.session.DefaultMockitoSessionBuilder.startMocking(DefaultMockitoSessionBuilder.java:83) ... 70 more Caused by: java.lang.AbstractMethodError: Receiver class org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator$ParameterWritingVisitorWrapper does not define or inherit an implementation of the resolved method 'abstract org.objectweb.asm.ClassVisitor wrap(net.bytebuddy.description.type.TypeDescription, org.objectweb.asm.ClassVisitor, net.bytebuddy.implementation.Implementation$Context, net.bytebuddy.pool.TypePool, net.bytebuddy.description.field.FieldList, net.bytebuddy.description.method.MethodList, int, int)' of interface net.bytebuddy.asm.AsmVisitorWrapper. at net.bytebuddy.asm.AsmVisitorWrapper$Compound.wrap(AsmVisitorWrapper.java:743) at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$RedefinitionClassVisitor.visit(TypeWriter.java:4830) at org.objectweb.asm.ClassReader.accept(ClassReader.java:569) at org.objectweb.asm.ClassReader.accept(ClassReader.java:424) at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining.create(TypeWriter.java:3892) at net.bytebuddy.dynamic.scaffold.TypeWriter$Default.make(TypeWriter.java:2166) at net.bytebuddy.dynamic.scaffold.inline.RedefinitionDynamicTypeBuilder.make(RedefinitionDynamicTypeBuilder.java:224) at net.bytebuddy.dynamic.scaffold.inline.AbstractInliningDynamicTypeBuilder.make(AbstractInliningDynamicTypeBuilder.java:123) at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase.make(DynamicType.java:3659) at org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator.transform(InlineBytecodeGenerator.java:402) at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:244) at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188) at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:541) at java.instrument/sun.instrument.InstrumentationImpl.retransformClasses0(Native Method) at java.instrument/sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:169) at org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator.triggerRetransformation(InlineBytecodeGenerator.java:281) ... 94 more

OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

UserAndGroupServiceTest > hasUsersFalse() FAILED org.mockito.exceptions.base.MockitoException at MockitoExtension.java:153 Caused by: org.mockito.exceptions.base.MockitoException at TypeCache.java:153 Caused by: java.lang.IllegalStateException at InlineBytecodeGenerator.java:285 Caused by: java.lang.AbstractMethodError at AsmVisitorWrapper.java:743


Tech STack:

Spring boot - 3.1.4 Java - OpenJDK 17

And here is the dependency hierarchical

+--- org.springframework.boot:spring-boot-starter-test:3.1.4 | +--- org.springframework.boot:spring-boot-starter:3.1.4 () | +--- org.springframework.boot:spring-boot-test:3.1.4 | | --- org.springframework.boot:spring-boot:3.1.4 () | +--- org.springframework.boot:spring-boot-test-autoconfigure:3.1.4 | | +--- org.springframework.boot:spring-boot:3.1.4 () | | +--- org.springframework.boot:spring-boot-test:3.1.4 () | | --- org.springframework.boot:spring-boot-autoconfigure:3.1.4 () | +--- com.jayway.jsonpath:json-path:2.8.0 | +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.1 () | +--- net.minidev:json-smart:2.4.11 | | --- net.minidev:accessors-smart:2.4.11 | | --- org.ow2.asm:asm:9.3 | +--- org.assertj:assertj-core:3.24.2 | | --- net.bytebuddy:byte-buddy:1.12.21 -> 1.14.4 | +--- org.hamcrest:hamcrest:2.2 | +--- org.junit.jupiter:junit-jupiter:5.9.3 | | +--- org.junit:junit-bom:5.9.3 | | | +--- org.junit.jupiter:junit-jupiter:5.9.3 (c) | | | +--- org.junit.jupiter:junit-jupiter-api:5.9.3 (c) | | | +--- org.junit.jupiter:junit-jupiter-params:5.9.3 (c) | | | --- org.junit.platform:junit-platform-commons:1.9.3 (c) | | +--- org.junit.jupiter:junit-jupiter-api:5.9.3 | | | +--- org.junit:junit-bom:5.9.3 () | | | +--- org.opentest4j:opentest4j:1.2.0 | | | +--- org.junit.platform:junit-platform-commons:1.9.3 | | | | +--- org.junit:junit-bom:5.9.3 () | | | | --- org.apiguardian:apiguardian-api:1.1.2 | | | --- org.apiguardian:apiguardian-api:1.1.2 | | --- org.junit.jupiter:junit-jupiter-params:5.9.3 | | +--- org.junit:junit-bom:5.9.3 () | | +--- org.junit.jupiter:junit-jupiter-api:5.9.3 () | | --- org.apiguardian:apiguardian-api:1.1.2 | +--- org.mockito:mockito-core:5.3.1 | | +--- net.bytebuddy:byte-buddy:1.14.4 | | --- net.bytebuddy:byte-buddy-agent:1.14.4 | +--- org.mockito:mockito-junit-jupiter:5.3.1 | | --- org.mockito:mockito-core:5.3.1 () | +--- org.skyscreamer:jsonassert:1.5.1 | | --- com.vaadin.external.google:android-json:0.0.20131108.vaadin1 | +--- org.springframework:spring-core:6.0.12 () | +--- org.springframework:spring-test:6.0.12 | | --- org.springframework:spring-core:6.0.12 (*) | --- org.xmlunit:xmlunit-core:2.9.1

Could you please let me know what is going wrong.

Thanks, Aravind

aravinds502 avatar Oct 04 '23 13:10 aravinds502

You'd better upgrade your version of a first. For example:

      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-bom</artifactId>
        <version>5.4.0</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>

Or the latest version 5.6.0.

bom is used to manage version dependencies of Mockito and related libraries. By using mockito-bom, you can more easily manage versions of Mockito and its related modules without having to specify version numbers in each module.

back9907 avatar Oct 17 '23 06:10 back9907

i am facing the same issue and even after upgrading the mockito bom, it doesn't work

5aab avatar Dec 13 '23 09:12 5aab

I have a suggestion @5aab , you are creating a jpa repository and using it as an object instead of autowiring it in the service class and i couldn't see any initialization of repository object in service class. This usually makes the repository object null. Try adding the Autowired annotation to initialize the repository. Another suggestion is -> use doReturn().when() instead of when().then() and assertThat can be simplified with assertTrue

Saik2930 avatar Dec 17 '23 09:12 Saik2930

@aravinds502 were you able to fix this issue ?

karticchaudhary avatar Jan 03 '24 06:01 karticchaudhary

Facing the same issue

denysandriyanov avatar Jan 04 '24 17:01 denysandriyanov

Facing same issue . Any updates?

swapnilgangrade01 avatar Jan 05 '24 18:01 swapnilgangrade01

same issue here too this was introduced after converting the micro sevice to a config client

linkolen avatar Jan 05 '24 20:01 linkolen

Hi all,

I was facing a similar issue and found that the root cause was a missing Jakarta dependency and a mismatched spring dependency within the app. All of my unit tests were failing due to this along with a single mismatched spring dependency (spring-webmvc 5.3.26 instead of 6.1.2).

According to Spring: https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0/

Applications using Spring Boot 3 and above will need to move from Java EE to Jakarta EE. Including the following dependency fixed my issue:

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
</dependency>

Hope this helps at least someone!

bran-williams avatar Jan 08 '24 15:01 bran-williams

Hi all,

I was facing a similar issue and found that the root cause was a missing Jakarta dependency and a mismatched spring dependency within the app. All of my unit tests were failing due to this along with a single mismatched spring dependency (spring-webmvc 5.3.26 instead of 6.1.2).

According to Spring: https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0/

Applications using Spring Boot 3 and above will need to move from Java EE to Jakarta EE. Including the following dependency fixed my issue:

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
</dependency>

Hope this helps at least someone!

Hi @bran-williams , Could you please let me know about the spring security version that you have used for the upgrade?

reethub avatar Jan 24 '24 06:01 reethub

None of the above is working for me, still got the same issue.

pexa-ttonini avatar Feb 07 '24 06:02 pexa-ttonini

I have upgraded my spring version to 6.0.6 and the dependencies have also been changed accordingly along with spring boot starter test But while running the test cases..it is throwing no such method found referring javax.servlet.ServletContext. I have migrated everything to latest Jakarta in the code base Can anyone suggest what else to check???

Darshana343 avatar Feb 08 '24 12:02 Darshana343

@Darshana343 - you can try adding compile only dependency for javax servlet and check.

reethub avatar Feb 13 '24 11:02 reethub

We facing similar issue: java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null) at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:84) ~[mockito-core-5.3.1.jar:?] at jdk.proxy3.$Proxy124.getHandler(Unknown Source) ~[?:?] at org.mockito.internal.util.MockUtil.getMockHandlerOrNull(MockUtil.java:158) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.util.MockUtil.isMock(MockUtil.java:147) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.util.DefaultMockingDetails.isMock(DefaultMockingDetails.java:32) ~[mockito-core-5.3.1.jar:?] at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:106) ~[spring-boot-test-3.1.9.jar:3.1.9] at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:85) ~[spring-boot-test-3.1.9.jar:3.1.9] at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:73) ~[spring-boot-test-3.1.9.jar:3.1.9] at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.beforeTestMethod(ResetMocksTestExecutionListener.java:60) ~[spring-boot-test-3.1.9.jar:3.1.9] at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:288) ~[spring-test-6.0.17.jar:6.0.17] at org.springframework.test.context.junit.jupiter.SpringExtension.beforeEach(SpringExtension.java:174) ~[spring-test-6.0.17.jar:6.0.17] at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeEachCallbacks$2(TestMethodTestDescriptor.java:166) ~[junit-jupiter-engine-5.9.3.jar:5.9.3] at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeMethodsOrCallbacksUntilExceptionOccurs$6(TestMethodTestDescriptor.java:202) ~[junit-jupiter-engine-5.9.3.jar:5.9.3] at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(TestMethodTestDescriptor.java:202) ~[junit-jupiter-engine-5.9.3.jar:5.9.3] at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeEachCallbacks(TestMethodTestDescriptor.java:165) ~[junit-jupiter-engine-5.9.3.jar:5.9.3] at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:132) ~[junit-jupiter-engine-5.9.3.jar:5.9.3] at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68) ~[junit-jupiter-engine-5.9.3.jar:5.9.3] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:202) ~[junit-platform-engine-1.9.3.jar:1.9.3] at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:194) ~[?:?] at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?] at java.util.concurrent.ForkJoinTask.awaitDone(ForkJoinTask.java:436) ~[?:?] at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:670) ~[?:?] at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.joinConcurrentTasksInReverseOrderToEnableWorkStealing(ForkJoinPoolHierarchicalTestExecutorService.java:179) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:153) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) ~[junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) [junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) [junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) [junit-platform-engine-1.9.3.jar:1.9.3] at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:202) [junit-platform-engine-1.9.3.jar:1.9.3] at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:194) [?:?] at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) [?:?] at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) [?:?] at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) [?:?] at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) [?:?] at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) [?:?] Caused by: java.lang.IllegalStateException: Internal problem occurred, please report it. Mockito is unable to load the default implementation of class that is a part of Mockito distribution. Failed to load interface org.mockito.plugins.MockMaker at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:104) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.getDefaultPlugin(DefaultMockitoPlugins.java:78) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:75) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:50) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.PluginRegistry.(PluginRegistry.java:27) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.Plugins.(Plugins.java:22) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.MockitoCore.(MockitoCore.java:73) ~[mockito-core-5.3.1.jar:?] at org.mockito.Mockito.(Mockito.java:1683) ~[mockito-core-5.3.1.jar:?] at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:105) ~[spring-boot-test-3.1.9.jar:3.1.9] ... 42 more Caused by: java.lang.reflect.InvocationTargetException at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?] at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?] at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?] at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:102) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.getDefaultPlugin(DefaultMockitoPlugins.java:78) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:75) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:50) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.PluginRegistry.(PluginRegistry.java:27) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.Plugins.(Plugins.java:22) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.MockitoCore.(MockitoCore.java:73) ~[mockito-core-5.3.1.jar:?] at org.mockito.Mockito.(Mockito.java:1683) ~[mockito-core-5.3.1.jar:?] at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:105) ~[spring-boot-test-3.1.9.jar:3.1.9] ... 42 more Caused by: org.mockito.exceptions.base.MockitoInitializationException: Could not initialize inline Byte Buddy mock maker.

It appears as if your JDK does not supply a working agent attachment mechanism. Java : 17 JVM vendor name : Alpine JVM vendor version : 17.0.10+7-alpine-r0 JVM name : OpenJDK 64-Bit Server VM JVM version : 17.0.10+7-alpine-r0 JVM info : mixed mode, sharing OS name : Linux OS version : 4.18.0-372.40.1.el8_6.x86_64

at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<init>(InlineDelegateByteBuddyMockMaker.java:244) ~[mockito-core-5.3.1.jar:?]
at org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker.<init>(InlineByteBuddyMockMaker.java:23) ~[mockito-core-5.3.1.jar:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?]
at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:102) ~[mockito-core-5.3.1.jar:?]
at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.getDefaultPlugin(DefaultMockitoPlugins.java:78) ~[mockito-core-5.3.1.jar:?]
at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:75) ~[mockito-core-5.3.1.jar:?]
at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:50) ~[mockito-core-5.3.1.jar:?]
at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:27) ~[mockito-core-5.3.1.jar:?]
at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:22) ~[mockito-core-5.3.1.jar:?]
at org.mockito.internal.MockitoCore.<clinit>(MockitoCore.java:73) ~[mockito-core-5.3.1.jar:?]
at org.mockito.Mockito.<clinit>(Mockito.java:1683) ~[mockito-core-5.3.1.jar:?]
at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:105) ~[spring-boot-test-3.1.9.jar:3.1.9]
... 42 more

Caused by: java.lang.IllegalStateException: Could not self-attach to current VM using external process at net.bytebuddy.agent.ByteBuddyAgent.installExternal(ByteBuddyAgent.java:701) ~[byte-buddy-agent-1.14.4.jar:?] at net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:631) ~[byte-buddy-agent-1.14.4.jar:?] at net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:611) ~[byte-buddy-agent-1.14.4.jar:?] at net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:563) ~[byte-buddy-agent-1.14.4.jar:?] at net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:540) ~[byte-buddy-agent-1.14.4.jar:?] at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.(InlineDelegateByteBuddyMockMaker.java:115) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker.(InlineByteBuddyMockMaker.java:23) ~[mockito-core-5.3.1.jar:?] at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?] at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?] at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?] at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:102) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.getDefaultPlugin(DefaultMockitoPlugins.java:78) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:75) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:50) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.PluginRegistry.(PluginRegistry.java:27) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.configuration.plugins.Plugins.(Plugins.java:22) ~[mockito-core-5.3.1.jar:?] at org.mockito.internal.MockitoCore.(MockitoCore.java:73) ~[mockito-core-5.3.1.jar:?] at org.mockito.Mockito.(Mockito.java:1683) ~[mockito-core-5.3.1.jar:?] at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:105) ~[spring-boot-test-3.1.9.jar:3.1.9] ... 42 more

ohadpinch avatar Feb 28 '24 08:02 ohadpinch

Try with using this Mockito dependency. Please try with different version too if it is not working. <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-inline</artifactId> <version>5.2.0</version> </dependency>

ganesa-vijayakumar avatar Mar 12 '24 12:03 ganesa-vijayakumar