当我运行这个测试时(使用 jmockit 和 TestNG,不确定这是否相关):
public class Test {
@Test public void test(@Mocked ProcessBuilder pb) throws IOException {
new Expectations() {{ pb.start(); result = null; }};
assertNull(m());
}
public static Process m() throws IOException {
return new ProcessBuilder("").start();
}
}
我得到这个例外:
java.lang.IllegalAccessError: class java.lang.ProcessBuilder (in module java.base) cannot access class javax.print.PrintException (in module java.desktop) because module java.base does not read module java.desktop
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java)
....
我正在使用构建 177。
我可以使用--add-reads java.base=java.desktop
参数重新运行测试,它工作正常,但我真的不明白这里发生了什么。
为什么我得到那个例外?