Android单元测试遇org.json.JSONObject未模拟及返回null问题求助
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

