2012-09-10 33 views
10

के रूप में एक कन्स्ट्रक्टर का मज़ाक उड़ा रहा है। मैं विभिन्न मॉकिंग पुस्तकालयों और PowerMock (विशेष रूप से EasyMock एक्सटेंशन) के इन्स और आउट सीखने की कोशिश कर रहा हूं, सूची में अगला है। मैं एक कन्स्ट्रक्टर का मज़ाक लगाने का प्रयास कर रहा हूं और प्रदान किए गए उदाहरणों में वही प्रतिक्रिया नहीं होती है जब मैं उन्हें दोहराने की कोशिश करता हूं। जहां तक ​​मैं कह सकता हूं, यह कभी भी कन्स्ट्रक्टर को झुकाता नहीं है और सिर्फ सामान्य होता है जैसे कि यह सामान्य था।पावरमोक की उम्मीदन्यू() अपेक्षित

यह परीक्षण वर्ग है:

@RunWith(PowerMockRunner.class) 
@PrepareForTest({Writer.class}) 
public class FaultInjectionSituationTest { 

    @Test 
    public void testActionFail() throws Exception { 
     FaultInjectionSituation fis = new FaultInjectionSituation(); 
     PowerMock.expectNew(Writer.class, "test") 
      .andThrow(new IOException("thrown from mock")); 
     PowerMock.replay(Writer.class); 
     System.out.println(fis.action()); 
     PowerMock.verify(Writer.class); 
    } 

} 

मैं एक EasyMock.isA (String.class) के साथ "परीक्षण" की जगह की कोशिश की है, लेकिन यह एक ही परिणाम सामने आए। ,

public class Writer { 
    public Writer(String s) throws IOException { 
    } 

    public Writer() throws IOException{ 
    } 
} 

जब परीक्षण चलाया जाता है इसे बाहर प्रिंट "फेंक बिना लौटे:

public class FaultInjectionSituation { 

    public String action(){ 
     Writer w; 
     try { 
      w = new Writer("test"); 
     } catch (IOException e) { 
      System.out.println("thrown: " + e.getMessage()); 
      return e.getLocalizedMessage(); 
     } 
     return "returned without throw"; 
    } 
} 

" लेखक "एक वर्ग का एक खोल से ज्यादा कुछ नहीं है:

यह FaultInjectionSituation है ", संकेत है कि अपवाद कभी नहीं फेंक दिया गया था।

उत्तर

21

तुम इतनी PowerMock एक मज़ाक उड़ाया निर्माता कॉल की उम्मीद जानता है, वर्ग कि निर्माता के रूप में अच्छी तरह से फोन कर रहा है तैयार करने के लिए की जरूरत है। निम्नलिखित के साथ अपना कोड अपडेट करने का प्रयास करें:

@RunWith(PowerMockRunner.class) 
@PrepareForTest({Writer.class, FaultInjectionSituation.class}) 
public class FaultInjectionSituationTest { 
// as before 
} 
+1

धन्यवाद, मुझे एहसास नहीं हुआ कि कन्स्ट्रक्टर नामक वस्तु को भी शामिल करने की आवश्यकता है। – AdamSpurgin

+0

मैं एक ही मुद्दे में भाग गया ... निश्चित रूप से मैं क्या खो रहा था :) –

+0

बहुत बहुत धन्यवाद, जब तक मुझे यह जवाब नहीं मिला, तब तक मैं लंबे समय तक संघर्ष कर रहा था। – OQJF

1

आप पहली बार एक नकली वस्तु बनाने के लिए की जरूरत है:

Writer mockWriter = PowerMock.createMock(Writer.class) 
PowerMock.expectNew(Writer.class, "test").andReturn(mockWriter) 
+0

मैं एक नकली वस्तु बनाने की कोशिश नहीं कर रहा हूं, मैं निर्माता को अवरुद्ध करने और इसके स्थान पर अपवाद फेंकने का प्रयास कर रहा हूं। [इस पृष्ठ] के "अधिक सुविधाएं" खंड (http://code.google.com/p/powermock/wiki/MockConstructor) जो मैं लक्षित कर रहा हूं। – AdamSpurgin

+1

क्षमा करें, मैं देखता हूं कि आप क्या करने की कोशिश कर रहे हैं। मैंने अभी ज्यूनिट 4 पर अपना कोड आजमाया है और यह "नकली से फेंक दिया गया" प्रिंट करता है (आप क्या उम्मीद करेंगे)। क्या आप किसी भी मौके से टेस्टएनजी का उपयोग कर रहे हैं? मैं टेस्टएनजी से परिचित नहीं हूं लेकिन जब मैंने टेस्टएनजी का उपयोग करके इसे चलाया, तो मुझे "फेंक दिए बिना लौटा" –

+0

मैं जूनिट 4 का उपयोग कर रहा हूं। मैं ऐसा कुछ भी नहीं सोच सकता जो इसे काम नहीं करेगा। – AdamSpurgin