2013-09-27 8 views
9

के लिए Powemockito सेट अप करना मैं कुछ स्थिर विधि कॉलों को नकल करने के लिए मोकिटो के साथ पावरमॉक का उपयोग करना चाहता हूं। मैंने एसओ के साथ-साथ PowerMock Getting Started और MockStatic पृष्ठों के निर्देशों और उदाहरणों का पालन किया है, लेकिन मैं अभी तक एक मॉकस्टैटिक() कॉल पूरा नहीं कर रहा हूं।स्थिर मॉकिंग

java.lang.NoClassDefFoundError: org/Mockito/mock/MockName 
at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:70) 
at ...my test class method call... 

के रूप में मैं प्रयुक्त शब्दावली की खोज की गई है मुझे यकीन है कि यह एक सेटअप समस्या है कर रहा हूँ:

जब मैं अपने परीक्षण वर्ग से mockStatic (foo.class) कहते हैं, मैं excception दिया हूँ इसे बहुत भ्रमित करने के लिए सेट अप करने के लिए। मैंने PowerMock downloads से मॉकिटो ज़िप को पकड़ लिया। ग्रहण (3.5.2) में मैंने प्रोजेक्ट गुण खोले और सभी जारों को बिल्ड पथ में जोड़ा। मैंने पूरे अनजिप किए गए पावरमॉकिटो फ़ोल्डर को अपने पर्यावरण वर्स क्लासपाथ में जोड़ने की कोशिश की, और फिर केवल पावरमॉकिटो जार विशेष रूप से जब काम नहीं किया।

मैं इन अपने परीक्षण वर्ग के कक्षा स्तर के रूप में अच्छी तरह, powermock निर्देशों के अनुसार annotationsat:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(ApplicationContextLoader.class) 

इसके अलावा इन powermock विशेष आयात:

import org.powermock.api.mockito.PowerMockito; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

आप में से जो करने के लिए जो पहले PowerMockito का उपयोग किया है, यहां तक ​​कि केवल सही दिशा में एक सूचक, या जांच करने के लिए कुछ वास्तव में सहायक होगा। मैं यह देखने के लिए संघर्ष कर रहा हूं कि मेरे सेटअप का उपयोग उन पदों से अलग कैसे है जो मैंने देखा है - जो मैं बता सकता हूं - वही वाक्यविन्यास।

+0

क्या तुमने कभी एक समाधान मिला? – Dave

+0

मुझे याद नहीं है, हालांकि यह दो साल हो गया है। मेरे पास @Walls upvoted का उत्तर है, इसलिए समाधान की तुलना में यह सबसे अधिक सहायता होनी चाहिए। – Ubunfu

उत्तर

3

यदि आप एक स्थिर मॉक ऑब्जेक्ट का उपयोग कर रहे हैं, तो अपने PrepareForTest एनोटेशन में, उस वर्ग को जोड़ें जो स्थैतिक वर्ग के अलावा स्थैतिक वस्तु का उपयोग कर रहा है। यदि आपके द्वारा परीक्षण की जाने वाली कक्षा को इस स्थिर का उपयोग करने की आवश्यकता है, तो वर्तमान कक्षा को एनोटेशन में जोड़ें। आप वास्तव में कक्षा का नकल नहीं करते हैं, लेकिन इसे स्थिर करने के लिए स्थैतिक के लिए एनोटेशन में होना आवश्यक है। यह अजीब लगता है, लेकिन यह काम करता है।

एनोटेशन में कई कक्षाएं जोड़ते समय आप उन्हें {} के अंदर रख सकते हैं और अल्पविराम से अलग हो सकते हैं। उदाहरण के लिए यदि आपके स्थिर वर्ग StaticA.class है और स्थिर का उपयोग कर वर्ग है CallerOfStatic.class आप का उपयोग कर सकते हैं:

@RunWith(PowerMockRunner.class) 
@PrepareForTest({StaticA.class, CallerOfStatic.class}) 
+0

धन्यवाद, मैं सिर्फ इतना है कि बाहर की कोशिश की है, जिससे मेरी एनोटेशन इस तरह दिखेगा: @PrepareForTest ({ApplicationContextLoader.class, \t \t TestClass.class}) सार्वजनिक वर्ग TestClass {..test वर्ग कोड '@RunWith (PowerMockRunner.class) ...} ' – Ubunfu

+0

@Ubunfu ने यह काम किया :) ??? – Walls

+0

हाहा, स्पष्ट रूप से मैं उस भाग को पढ़ने के लिए पढ़ने योग्य बनाने की कोशिश में बहुत व्यस्त था। लेकिन ऐसा कोई फर्क नहीं पड़ता है। – Ubunfu

24

शायद, Powermock और Mockito के संस्करणों संगत नहीं हैं। इसे ठीक करें और यह अब एक मुद्दा नहीं होगा।

Mockito      PowerMock 
1.10.8+      1.6.2+ 
1.9.5-rc1 - 1.9.5   1.5.0 - 1.5.6 
1.9.0-rc1 & 1.9.0   1.4.10 - 1.4.12 
1.8.5      1.3.9 to 1.4.9 
1.8.4      1.3.7 & 1.3.8 
1.8.3      1.3.6 
1.8.1 & 1.8.2    1.3.5 
1.8       1.3 
1.7       1.2.5 

देखें: https://github.com/jayway/powermock/wiki/MockitoUsage

0

इस चार्ट में के रूप में गठबंधन यकीन powermockito और mockito संस्करण बनाएं - https://github.com/jayway/powermock/wiki/MockitoUsage#supported-versions,

को खोजने के लिए आसान तरीका है,

mvn dependency:tree | grep mockito 
[INFO] | \- org.mockito:mockito-core:jar:1.8.5:compile 
[INFO] +- org.mockito:mockito-all:jar:1.9.5:compile 
[INFO] +- org.powermock:powermock-api-mockito:jar:1.5.6:compile 

मेरे मामले में, powermock 1.5.6 और मॉकिटो 1.9.5 गठबंधन किए गए थे लेकिन कुछ को mockito 1.8.5 का उपयोग करने के लिए बदलना पड़ा, जैसा कि कुछ निर्भरता में अन्यथा पहले से ही मॉकिटो 1.8.5 का उपयोग कर रहा था।

बाद संयोजन पूरी तरह से मेरे लिए काम करता है,

mvn dependency:tree | grep mockito 
[INFO] | \- org.mockito:mockito-core:jar:1.8.5:compile 
[INFO] +- org.mockito:mockito-all:jar:1.8.5:compile 
[INFO] +- org.powermock:powermock-api-mockito:jar:1.4.9:compile 
संबंधित मुद्दे