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

Android单元测试遇org.json.JSONObject未模拟及返回null问题求助

解决JUnit测试中java.lang.RuntimeException: Method getString in org.json.JSONObject not mocked问题

我之前也踩过这个坑,Android SDK自带的org.json包其实是仅存根实现——只有方法签名,没有实际的逻辑代码,所以在本地JUnit测试(非Android Instrumented Tests)里调用它的方法时,就会抛出这个"not mocked"异常。你已经添加了官方的org.json:json依赖但问题仍存在,大概率是依赖优先级或Gradle配置的问题,试试下面这些解决方案:

方案1:调整依赖优先级,强制使用官方完整实现

Android SDK的存根依赖优先级可能高于你添加的testImplementation依赖,你可以在Gradle中明确排除Android自带的org.json存根,再引入官方实现:

dependencies {
    // 排除Android SDK自带的org.json存根
    testImplementation('junit:junit:4.13.2') {
        exclude group: 'org.json'
    }
    // 引入官方完整的org.json实现(建议用最新稳定版本)
    testImplementation 'org.json:json:20240303'
}

方案2:临时绕过存根限制(应急用,不推荐)

如果你只是想先让测试不崩溃,暂时不想调整依赖,可以在Module级的build.gradle中添加配置,让存根方法返回默认值而非抛出异常:

android {
    // ...其他已有配置
    testOptions {
        unitTests.returnDefaultValues = true
    }
}

⚠️ 注意:这个方案只是让测试不崩溃,getString这类方法会返回null等默认值,无法真正验证你的JSON解析逻辑,仅适合临时调试。

方案3:确认测试目录是否正确

确保你的测试类放在src/test/java目录下(本地单元测试),而非src/androidTest/java(Instrumented测试)。如果是Instrumented测试,Android系统会提供完整的org.json实现,不需要额外添加依赖。

验证依赖是否生效

你可以在Android Studio中通过File > Project Structure > Modules > Dependencies路径,查看Test分组下的依赖列表,确认org.json:json已被正确引入,且未被Android SDK的存根覆盖。


内容的提问来源于stack exchange,提问作者Patryk Jabłoński

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:00:16