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

升级Android Studio Electric Eel后MockK spyk初始化URL失败

解决Android Studio Electric Eel中mockk spyk初始化URL抛出IllegalAccessException的问题

问题根源

Android Studio Electric Eel对JDK模块系统的反射访问限制更严格,java.net.URL作为JDK核心类,其内部私有成员的访问权限被收紧,导致mockk依赖的反射机制无法正常访问这些成员,从而抛出IllegalAccessException。

解决方案

1. 添加JVM参数放宽反射限制

在测试的JVM配置中添加参数,允许非命名模块访问java.net包的内部成员:

--add-opens java.base/java.net=ALL-UNNAMED
  • Android Studio Run配置:打开测试类的Run/Debug配置,在「VM options」字段中填入上述参数。
  • Gradle配置:在模块的build.gradle(或build.gradle.kts)中添加测试任务的JVM参数:
tasks.withType(Test) {
    jvmArgs += "--add-opens java.base/java.net=ALL-UNNAMED"
}

2. 替换spyk URL的测试方案

由于JDK核心类的mock容易受环境限制,建议换一种测试思路:

  • 封装URL相关操作到自定义工具类中,对这个自定义类进行spyk或mock,而非直接操作java.net.URL。
  • 如果必须验证URL逻辑,直接创建真实的URL实例(例如new URL("http://localhost:8080")),基于真实实例完成测试,避免使用spyk。

3. 尝试mockk预览版本

如果前两种方案无效,可以尝试使用mockk的开发快照版本,可能包含针对新环境的兼容性修复。在Gradle中替换依赖版本为:

testImplementation "io.mockk:mockk:1.13.5-SNAPSHOT"

注意快照版本稳定性可能不足,建议仅作为临时验证方案。

验证流程

优先尝试添加JVM参数,这是最直接的修复方式;若参数无效,再考虑重构测试代码封装URL逻辑。

内容的提问来源于stack exchange,提问作者lannyf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:37:11