启用Mockito inline时Byte Buddy mock maker初始化失败,求解决
问题:Mockito inline模式初始化失败
常规模式下测试正常运行,但启用Mockito inline模式时出现初始化错误,具体错误日志如下:
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 25.556 s <<< FAILURE! - in es.ddmain.utils.FileSystemUtilsTest [ERROR] testIntentarSubirImagenYtestBorrarFichero Time elapsed: 25.548 s <<< ERROR! java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null) at es.ddmain.utils.FileSystemUtilsTest.testIntentarSubirImagenYtestBorrarFichero(FileSystemUtilsTest.java:61) Caused by: java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in java.lang.CompoundEnumeration@249676e4 at es.ddmain.utils.FileSystemUtilsTest.testIntentarSubirImagenYtestBorrarFichero(FileSystemUtilsTest.java:61) Caused by: java.lang.reflect.InvocationTargetException at es.ddmain.utils.FileSystemUtilsTest.testIntentarSubirImagenYtestBorrarFichero(FileSystemUtilsTest.java:61) 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 : 11 JVM vendor name : Oracle Corporation JVM vendor version : 11.0.2+9-LTS JVM name : Java HotSpot(TM) 64-Bit Server VM JVM version : 11.0.2+9-LTS JVM info : mixed mode OS name : Windows 7 OS version : 6.1 at es.ddmain.utils.FileSystemUtilsTest.testIntentarSubirImagenYtestBorrarFichero(FileSystemUtilsTest.java:61) Caused by: java.lang.IllegalStateException: Could not self-attach to current VM using external process at es.ddmain.utils.FileSystemUtilsTest.testIntentarSubirImagenYtestBorrarFichero(FileSystemUtilsTest.java:61)
使用的Mockito依赖:
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-junit-jupiter</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency>
解决方案
升级JDK版本:你使用的JDK 11.0.2属于早期版本,部分JVM附件机制存在兼容性问题。升级到JDK 11的最新补丁版本(如11.0.20+),或直接切换到JDK 17(LTS版本,兼容性更稳定),可解决VM自附加失败的问题。
手动添加Byte Buddy依赖:Mockito inline模式依赖Byte Buddy,虽然
mockito-junit-jupiter会间接引入,但可能存在版本匹配问题。手动添加指定版本的Byte Buddy依赖,确保与Mockito版本兼容:
<dependency> <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy-agent</artifactId> <version>1.12.22</version> <scope>test</scope> </dependency>
(注:Mockito 4.8.1对应的Byte Buddy兼容版本为1.12.x系列,可根据实际情况微调)
- 禁用自附加机制:若无法升级JDK,可通过系统属性关闭Mockito的自附加功能,改用手动指定Java agent的方式:
- 在测试启动参数中添加:
-javaagent:path/to/byte-buddy-agent-xxx.jar - 或在测试类中提前设置系统属性:
- 在测试启动参数中添加:
static { System.setProperty("mockito.mock-maker-inline.attach", "false"); }
- 降级Mockito版本:若上述方法均无效,可尝试降级到Mockito 3.x系列(如3.12.4),旧版本的inline模式对JDK 11早期版本兼容性更好。
内容的提问来源于stack exchange,提问作者Blrackerd
相关产品推荐
相关产品推荐

