जब मैं इस परीक्षण चलाने नहीं पढ़ता (JMockit और TestNG का उपयोग कर, यकीन नहीं करता है, तो यह है कि प्रासंगिक है):मॉड्यूल java.base मॉड्यूल java.desktop
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)
....
:
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();
}
}
मैं इस अपवाद
मैं बिल्ड 177 का उपयोग कर रहा हूं।
मैं --add-reads java.base=java.desktop
तर्क का उपयोग करके परीक्षण को फिर से शुरू कर सकता हूं और यह ठीक काम करता है लेकिन मुझे वास्तव में यह नहीं समझ रहा है कि यहां क्या हो रहा है।
मुझे यह अपवाद क्यों मिल रहा है?
मेरा अनुमान उन वर्गों के साथ कुछ बातचीत होगी जो पूर्ण रूप से लोड किए जा रहे हैं; 'PrintException'' IOException' का विस्तार करता है, और यह * लगता है * कुछ स्पष्ट रूप से स्विंग से संबंधित कुछ का उपयोग करते समय अस्पष्ट 'हेडलेस अपवाद' की तरह लगता है। मैं एक संभावित छिपे हुए वर्ग निर्भरता के बारे में एक बग दर्ज करने का सुझाव देता हूं। – chrylis
क्या मॉड्यूलपाथ या क्लासपाथ पर कक्षाएं/जार हैं? क्या आपके कोड के लिए परिभाषित कोई मॉड्यूल हैं? –
@ माइकलएस्टर क्लासपाथ पर - मैंने किसी मॉड्यूल को परिभाषित नहीं किया है। यह टेस्टएनजी और जेएमॉकिट और एक फ़ाइल (प्रश्न में टेस्ट क्लास) पर निर्भरता के साथ एक pom.xml के साथ एक साधारण परियोजना है। पोम में jmockit को चलाने की अनुमति देने के लिए निश्चित रूप से '-Djdk.attach.allowAttachSelf' की एक ArgLine शामिल है। – assylias