2012-07-13 24 views
5

एक बार जब मैं RunWith एनोटेशन जोड़ता हूं, तो @RunWith(PowerMockRunner.class) है स्प्रिंग ऑटोवायर अब और काम नहीं करता है!जब मैं "रनविथ" एनोटेशन जोड़ता हूं तो स्प्रिंग ऑटोवायर क्यों काम करता है?

class B { 
    @Autowire 
    SessionFactory session; 
} 

@RunWith(PowerMockRunner.class) 
@PrepareForTest{SomeClass.class} 

class Testing { 

    @Test 
    methodA(){ 
    //mehod 
    } 

    @Test 
    methodD(){ 
    }  
} 

अब, विधि एक वर्ग बी के लिए एक कॉल करता है, लेकिन RunWith(PowerMockRunner) एनोटेशन के कारण, Autowiring काम नहीं कर रहा। किसी भी तरह की सहायता का स्वागत किया जाएगा!

+1

क्या की तरह 'से पहले' मामले नज़र करता है। @Autowire सिर्फ काम नहीं करता है। क्या आप कुछ स्प्रिंग टेस्ट रनर या मॉकिटोज़ुनिटरनर या कुछ और काम कर रहे थे जब यह पहले काम कर रहा था? – jhericks

+1

ऑटो तारों के बजाय, क्षेत्र को एक नकली में सेट करने के लिए व्हाइटबॉक्स या सेटर्स का उपयोग करें। इस तरह आप अपनी कक्षा में क्या हो रहा है इसके बारे में अधिक नियंत्रण प्राप्त करते हैं। –

+0

हाय जेरिकिक्स, जब यह चल रहा था, रनविथ ने रनविथ (SpringJUnit4ClassRunner) कहा – TimeToCodeTheRoad

उत्तर

1

वसंत जादू नहीं है (भले ही यह कभी-कभी ऐसा लगता है)। जहां आप अपने कोड में नहीं हैं, आप वसंत को एक एप्लिकेशन संदर्भ शुरू करने का मौका दे रहे हैं और अपने बीन्स को ऑटो तारों के काम का काम करते हैं। आपको या तो खुद को संदर्भ शुरू करना होगा या @RunWith(SpringJUnit4ClassRunner.class) का उपयोग करने के लिए अपना परीक्षण स्विच करना होगा। दुर्भाग्यवश जुनीट एक समय में केवल एक धावक का समर्थन करता है, इसलिए आपको PowerMockRunner का उपयोग करना बंद कर देना होगा।

7

2016 में आप PowerMockito साथ धावक प्रतिनिधि उपयोग कर सकते हैं, प्रभावी रूप से दो धावकों का उपयोग कर:

@RunWith(PowerMockRunner.class) 
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) 

अधिक जानकारी यहां: https://github.com/jayway/powermock/wiki/JUnit_Delegating_Runner