2010-01-05 18 views
8

मैं राइनो मैक्स 3.5 का उपयोग कर रहा हूं और अपने कैच ब्लॉक में कुछ कार्यक्षमता का परीक्षण करने की मेरी अपेक्षा में अपवाद फेंकने की कोशिश कर रहा हूं।नए राइनो मोक्स में अपवाद कैसे फेंकें 3.5

लेकिन किसी कारण से यह अपवाद फेंक नहीं रहा है।

_xyz.stub(x => x.function(string)).throw(new exception("test string")); 

तो, मैं अपवाद फेंक कार्य करने के लिए कॉल को छोटा कर रहा हूँ, लेकिन यह अपवाद फेंक नहीं है।

उत्तर

12

मुझे यकीन नहीं है कि यह आपके लिए क्यों काम नहीं करता है। मैंने थोड़ा सा नमूना बनाया और यह मेरे लिए ठीक काम करता है। इस कोड पर एक नज़र डालें:

सबसे पहले मैंने वह कोड बनाया जिसे मैं परीक्षण करना चाहता हूं।

public interface IXyz 
{ 
    void Foo(); 
} 

public class Xyz : IXyz 
{ 
    public void Foo() 
    { 
    } 
} 

public class Sut 
{ 
    public void Bar(IXyz xyz) 
    { 
     xyz.Foo(); 
    } 
} 

अगला मैं एक परीक्षण विधि बनाने जा रहा हूं। इस मामले में मैं MbUnit का उपयोग कर रहा हूं लेकिन इसे किसी इकाई परीक्षण ढांचे के साथ काम करना चाहिए।

[Test] 
    [ExpectedException(typeof(ArgumentException), Message = "test string")] 
    public void BarFoo_Exception() 
    { 
     IXyz xyzStub = MockRepository.GenerateStub<IXyz>(); 
     xyzStub.Stub(x => x.Foo()).Throw(new ArgumentException("test string")); 
     new Sut().Bar(xyzStub); 
    } 

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

हो सकता है कि मैं {परीक्षण के शीर्ष पर अपेक्षित एक्सेप्शन लाइन] जोड़ना भूल जाऊं। – alice7

2

आपको अधिक जानकारी और अपने स्रोत कोड के अधिक पोस्ट करने की आवश्यकता हो सकती है। मेरा पहला अनुमान यह होगा कि जिस विधि को आप दबा रहे हैं वह उपभोक्ता में कभी भी हिट नहीं हो रहा है।

जैसे ही आप कोड के माध्यम से कदम उठाते हैं, वह जगह है जहां _xyz.function (स्ट्रिंग) का उपयोग किया जाता है?

+0

हां यह हिट हो जाता है। लेकिन किसी भी तरह यह अपवाद नहीं लौटा रहा है। – alice7

8

ऐसा लगता है कि यदि आप जिस विधि को अपवाद फेंकना चाहते हैं तो पैरामीटर है तो आपको .Throw(new Exception()) से पहले .IgnoreArguments() जोड़ने की आवश्यकता है।

उदाहरण के लिए, मैंने पाया कि निम्नलिखित अपवाद नहीं फेंक होगा:

queue.Stub(x => x.Send(messageQueueTransaction, auditEvent)).Throw(new Exception()); 

लेकिन निम्न होगा:

queue.Stub(x => x.Send(messageQueueTransaction, auditEvent)).IgnoreArguments().Throw(new Exception()); 

क्योंकि वादिम के अपवाद-फेंकने विधि parameterless था, यह अनदेखी के बिना काम किया तर्क।

1

मेरे लिए समाधान निम्नलिखित के रूप में किया गया था:

_xyz.Stub(x => x.Function(null)).IgnoreArguments().Throw(new Exception("test string")); 

नोट .IgnoreArguments() कॉल।

संबंधित मुद्दे