2012-08-28 17 views
9

शुरू में मैं junits में केवल Mockito उपयोग कर रहा था तो मैं @RunWith एनोटेशन में SpringJUnit4ClassRunner.class उपयोग कर रहा था यानीमुद्दों @RunWith एनोटेशन और powerMock

@RunWith(SpringJUnit4ClassRunner.class) 

जिसके कारण वसंत निर्भरता इंजेक्शन ठीक काम कर रहा था का उपयोग करते समय और हो रही थी

@Autowired 

Someservice someservice ; 

के माध्यम से एक बीन लेकिन अब, मैंने इसमें पावरमैक भी एकीकृत किया है।

तो doc के अनुसार, मैं जगह ले ली है

@RunWith(PowerMockRunner.class) 

लेकिन अब के साथ @RunWith एनोटेशन में वर्णित वर्ग, someservice बाहर आ रहा है अशक्त होने के लिए। वहाँ PowerMockRule उपयोग करने के लिए आपके पास @RunWith एनोटेशन

उत्तर

13

में दोनों SpringJUnit4ClassRunner.class और PowerMockRunner.class उपयोग करने के लिए एक रास्ता है।

@RunWith(SpringJUnit4ClassRunner.class) 
@PrepareForTest(X.class) 
public class MyTest { 
    @Rule 
    public PowerMockRule rule = new PowerMockRule(); 

    // Tests goes here 
    ... 
} 

PowerMock और Mockito साथ स्प्रिंग एकता टेस्ट की एक पूरी उदाहरण के लिए, आप इस maven project चेकआउट सकता है।

svn co http://powermock.googlecode.com/svn/tags/powermock-1.4.12/examples/spring-mockito/ 
cd spring-mockito/ 

पावरमॉक पर निर्भरताओं को देखें।

less pom.xml 

और फिर परीक्षण

mvn test 

चलाने के लिए और आप निम्नलिखित परीक्षण के परिणाम मिलना चाहिए:

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0 
+0

हे गॉन्टार्ड, मैंने आपके समाधान की कोशिश की है, लेकिन जब मैं अपने जूनिट को निष्पादित कर रहा था तो मुझे अपवाद मिल रहा था कि PowerMockRule "नियम" सार्वजनिक होना चाहिए, इसलिए मैंने इसे सार्वजनिक कर दिया और अब मुझे जावासवादी मिल रहा है। नॉटफाउंड अपवाद। कोई विचार? अपवाद java.lang.RuntimeException: javassist.NotFoundException: org.powermock.core.classloader.MockClassLoader.loadUnmockedClass (MockClassLoader.java:187) पर $ Proxy88 \t org.powermock.core.classloader.MockClassLoader.loadModifiedClass पर \t (MockClassLoader .जावा: 147) .... – Bhuvan

+0

@bhuvan मुझे नहीं पता, शायद यह [यह मुद्दा] है (http://code.google.com/p/powermock/issues/detail?id=350)। मैं भी अपना जवाब पूरा करता हूं। – gontard

+0

@gontard http://powermock.googlecode.com/svn/tags/powermock-1.4.12/examples/spring-mockito/ - यह लिंक अब काम नहीं कर रहा है। –

0
@RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations = "classpath:/test-servlet.xml") 
    public class ControlCenterManagerImplTest { 

    @Rule 
    public PowerMockRule rule = new PowerMockRule(); 

    //Powermock agent initialization not required and using maven dependency specified below we can execute Power mock using spring.} 

<!-- Required for PowerMock --> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-api-mockito</artifactId> 
     <version>1.5</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- Required for PowerMockRule --> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4-rule-agent</artifactId> 
     <version>1.5</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
    </dependency> 
9

मैं जानता हूँ कि इस सूत्र पुराना है, लेकिन इसे जोड़ने के लिए अच्छा है 2014 से और यह pull request, आप एनोटेशन का उपयोगपर रन संदर्भ "प्रतिनिधि" करने के लिए कर सकते हैं(या वास्तव में कोई अन्य धावक)।

@RunWith(PowerMockRunner.class) 
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) 
@PrepareForTest(X.class); 
public class MyTest { 

    // Tests goes here 
    ... 
} 

यह व्याख्या के साथ, आप अब और PowerMock नियम की जरूरत नहीं है:

कोड से ऊपर की तरह लग रही होगी!