java.lang.reflect.InaccessibleObjectException尝试 Mock 一个对象一段时间
Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @238e0d81
Run Code Online (Sandbox Code Playgroud)
Han*_*ans 19
如果 Mockito 需要对 Java 模块中的非公共部分进行反射访问,则可能会发生这种情况。如果您想坚持使用较新的 Java 版本,您可以通过在--add-opens调用中显式允许访问来解决此java问题 - 错误消息很有帮助,因为它为您提供了所需的模块和包:
java --add-opens java.base/java.lang=ALL-UNNAMED ...
(目标ALL-UNNAMED适用于所有非模块化类。请参阅https://www.oracle.com/corporate/features/understanding-java-9-modules.html了解这些指令的简要介绍。)
请注意,此选项在编译期间不适用,即不适用于javac; 它是一个运行时选项。
如果您使用 Gradle,您可以将其添加到您的测试任务中build.gradle:
test {
jvmArgs '--add-opens=java.base/java.lang=ALL-UNNAMED'
}
Run Code Online (Sandbox Code Playgroud)
或者,具有相同效果的替代语法:
test {
jvmArgs '--add-opens', 'java.base/java.lang=ALL-UNNAMED'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8919 次 |
| 最近记录: |