काम मैं powermock 1.5.1 और फ़ाइलें वर्ग का उपयोग कर एक ऐसी ही समस्या थी और संदेह है कि यह एक समस्या स्थिर कुछ/सभी jdk1.7 कक्षाएं मजाक है , हालांकि मुझे नहीं पता क्यों। मैंने जवासिस्ट संस्करण की भी जांच की और उस समय यह नवीनतम था (3.18.0-GA),
मैंने अपनी कक्षा को केवल फाइल लाइन पर परीक्षण के तहत छीन लिया और यह अभी भी काम नहीं कर पाया। मैंने फिर एक और स्थिर वर्ग, StringUtils.chop ("स्ट्रिंग") नकल करने का प्रयास करने का फैसला किया; (कॉमन्स-लैंग 3) और फिर मेरे पावरमेक परीक्षण ने काम किया और मैं इसे नकली से अपवाद उत्पन्न करने के लिए मजबूर करने में सक्षम था।
यह साबित हुआ कि मैंने पुस्तक द्वारा सबकुछ किया था और स्थिर मॉकिंग फाइल क्लास पर काम नहीं करती थी, लेकिन यह स्ट्रिंगयूटिल पर थी।
जिस तरह से मैंने बदल दिया, दोनों @PrepareForTest और PowerMockito.mockStatic() सही वर्ग का संदर्भ देने के लिए कहते हैं।
अंत में मैंने फ़ाइलों को मजाक कर दिया। अगर किसी और के पास एक ही समस्या है तो बस एक सिर-अप।
संपादित करें। यह काम कर रहा है: मैंने तब से यह कोशिश की है क्योंकि मुझे इसे किसी अन्य प्रोजेक्ट में चाहिए था। PowerMock आउट (1.5.3) का एक नया संस्करण है जो एक अद्यतन जैवसिस्ट (3.18.1-GA) का उपयोग करता है जो किसी अन्य टिप्पणी के प्रति मेरी प्रतिक्रिया में उल्लिखित एक बग को हल करता है।
मैं लगातार अब भी वर्ग यदि आप परीक्षण स्थिर तरीकों का खुलासा नहीं करता हैं @PrepareForTest
के साथ-साथ Files
को परीक्षण के अंतर्गत वर्ग जोड़कर काम करने के लिए Files
का मजाक हो सकता है। मुझे अन्य स्थैतिक मजाक करने के लिए पहले ऐसा करने की आवश्यकता नहीं थी। मुझे नहीं पता कि इसकी आवश्यकता क्यों है या Files
के लिए अलग-अलग काम करता है।
उदाहरण:
public class MyTestClass {
public void justToTestMocking(Path path) throws IOException {
if (!Files.exists(path)) {
throw new IllegalArgumentException("I know there is a deleteIfExists() but I am just testing mocking");
}
Files.delete(path);
}
}
और नीचे परीक्षण:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Files.class, MyTestClass.class})
public class MyTestClassTest {
@Before
public void setUp() {
mockStatic(Files.class);
}
@Test
public void justToTestMocking_WillDeletePath() throws IOException {
Path path = mock(Path.class);
MyTestClass test = new MyTestClass();
when(Files.exists(path)).thenReturn(true);
test.justToTestMocking(path);
verifyStatic();
Files.delete(path);
}
}
स्रोत
2013-07-11 06:03:15
BTW मैं एक NoSuchFileException हो रही है। – Stainedart