使用Mockito MockedConstruction抛出NoClassDefFoundError的问题排查
解决Mockito MockedConstruction NoClassDefFoundError问题
可能原因及修复步骤
检查依赖完整性
确保mockito-core和mockito-inline版本完全一致(均为4.4.0),依赖引入无遗漏。
Maven配置示例:<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>4.4.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-inline</artifactId> <version>4.4.0</version> <scope>test</scope> </dependency>Gradle配置示例:
testImplementation 'org.mockito:mockito-core:4.4.0' testImplementation 'org.mockito:mockito-inline:4.4.0'启用Inline MockMaker
在src/test/resources/mockito-extensions目录下创建org.mockito.plugins.MockMaker文件,写入内容:mock-maker-inline该文件是启用inline mockmaker的必要配置,缺失会导致MockedConstruction相关类无法加载。
清理项目缓存
执行构建工具的清理命令,比如Maven的mvn clean test或Gradle的gradle clean test,清除旧编译文件和依赖缓存,避免缓存引发的类加载异常。验证JDK版本
Mockito 4.x系列要求JDK 8及以上版本,确认测试运行环境的JDK版本符合要求,过低版本会导致类加载失败。排查依赖冲突
用构建工具查看依赖树,比如Maven的mvn dependency:tree或Gradle的gradle dependencies,检查是否存在其他版本的Mockito、byte-buddy等依赖冲突。若发现冲突,可通过排除依赖解决,示例如下:<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>4.4.0</version> <scope>test</scope> <exclusions> <exclusion> <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy</artifactId> </exclusion> </exclusions> </dependency>之后手动引入Mockito 4.4.0适配的byte-buddy版本(1.12.10):
<dependency> <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy</artifactId> <version>1.12.10</version> <scope>test</scope> </dependency>
测试代码示例
确保MockedConstruction的使用方式正确:
import org.junit.jupiter.api.Test; import org.mockito.MockedConstruction; import java.net.URL; import java.io.ByteArrayInputStream; import static org.mockito.Mockito.*; public class UrlFetcherTest { @Test void testFetchContent() { try (MockedConstruction<URL> mockedUrl = mockConstruction(URL.class, (mock, context) -> { when(mock.openStream()).thenReturn(new ByteArrayInputStream("test data".getBytes())); })) { UrlFetcher fetcher = new UrlFetcher(); String result = fetcher.fetchContent("http://test.com"); // 执行断言逻辑 } } }
内容的提问来源于stack exchange,提问作者user1472672
相关产品推荐
相关产品推荐

