2011-09-20 11 views
22

मैं नीचे के रूप में अपवाद फेंकने के लिए एक शून्य स्थिर विधि का नकल करने के लिए Powermock और Mockito का उपयोग करने की कोशिश कर रहा हूं। लेकिन मैं एक समस्या से मुलाकात की। जब तक मैं एक ही तर्क के साथ Adder.add() के दो आमंत्रण नहीं करता, तो मॉक IOException फेंक नहीं दिया जाएगा।Powermock के साथ अपवाद फेंकने के लिए एक शून्य स्थैतिक विधि नकली कैसे करें?

बीटीडब्ल्यू, मैंने यूनिट टेस्ट क्लास में @RunWith(PowerMockRunner.class) और @PrepareForTest(Adder.class) जोड़ा है।

class Adder{ 
    public static void add(int i) throws IOException{ 
     return; 
    } 
} 

@Test 
public void testAdder() throws IOException{ 
    PowerMockito.mockStatic(Adder.class); 
    PowerMockito.doThrow(new IOException()).when(Adder.class); 
    Adder.add(12); 
    try { 
     Adder.add(11); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    // assert things 
} 

अग्रिम धन्यवाद। :)

उत्तर नीचे जैसा है।

परामर्श के बाद http://code.google.com/p/powermock/issues/detail?id=278, वास्तव में Adder.add (12) ऊपर नकली स्थैतिक विधि स्थापित करने का हिस्सा है। इसका मतलब है कि तर्क 12 के साथ Adder.add() का आह्वान करते समय, IOException फेंक दिया जाएगा। समझना मुश्किल है, है ना? :) तो यह नीचे के रूप में लिखा जाना चाहिए।

PowerMockito.mockStatic(Adder.class); 
PowerMockito.doThrow(new IOException()).when(Adder.class); 
Adder.add(anyInt()); 

उत्तर

23

उत्तर नीचे जैसा है।

परामर्श के बाद http://code.google.com/p/powermock/issues/detail?id=278, वास्तव में Adder.add (12) ऊपर नकली स्थैतिक विधि स्थापित करने का हिस्सा है। इसका मतलब है कि तर्क 12 के साथ Adder.add() का आह्वान करते समय, IOException फेंक दिया जाएगा। समझना मुश्किल है, है ना? :) तो यह नीचे के रूप में लिखा जाना चाहिए।

PowerMockito.mockStatic(Adder.class); 
PowerMockito.doThrow(new IOException()).when(Adder.class); 
Adder.add(anyInt()); 

संपादित करें:
लिंक मर चुका है, Internet Archive एक आज़मा सकते हैं।

+2

यह सहज नहीं है। इस काम को पाने के लिए संघर्ष किया। पारितोषिक के लिए धन्यवाद। – Dhiraj

+1

ध्यान दें कि 'Adder.add (anyInt());' अपवाद को ट्रिगर नहीं करता है, यह इसे 'Adder.add()' पर कॉल पर लागू करता है। – sjngm

0

क्या आप पावरमैक को रीप्ले मोड में रखना भूल गए?

How to Mock Static methods.

अपने लिंक प्रति ...

एक स्थिर विधि के व्यवहार सत्यापन सत्यापित करने के लिए कैसे दो चरणों में किया जाता है। पहले व्यवहार को सत्यापित करने के लिए PowerMockito.verifyStatic() पर कॉल करें और उस स्थिर विधि को कॉल करें जिसे आप सत्यापित करना चाहते हैं। जैसे

PowerMockito.verifyStatic(); 
Static.firstStaticMethod(param); 

महत्वपूर्ण: आप विधि सत्यापन प्रति verifyStatic() कॉल करने के लिए की जरूरत है।

+0

मैं यहाँ ट्यूटोरियल पढ़ें के बाद से मैं Mockito उपयोग कर रहा हूँ। http://code.google.com/p/powermock/wiki/MockitoUsage13 यह उल्लेख नहीं करता है कि मुझे रीप्ले मोड का उपयोग करना है। – Smartmarkey

+0

ओह। PowerMockito देखा और PowerMock पढ़ें। –

+0

आपके लिंक –

1

या

PowerMockito.mockStatic(Adder.class); 
PowerMockito.doThrow(new IOException()).when(Adder.class, "add", Mathers.eq(12));