You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:50:33