xUnit

2011-03-21 8 views
16

के साथ यूनिट परीक्षण अपवाद संदेश मैं वर्तमान में अपने एमएसटेस्ट यूनिट परीक्षणों को xUnit में परिवर्तित कर रहा हूं। XUnit के साथ, अपवाद संदेशों का परीक्षण करने का कोई तरीका है? क्या अपवाद संदेशों का परीक्षण करना सही है क्योंकि अपवाद प्रकार का विरोध किया गया है?xUnit

उत्तर

24

मुझे लगता है कि यह दोनों अपवाद प्रकार और संदेश के लिए परीक्षण करने के लिए सही है किया जाएगा। और दोनों XUnit में आसान कर रहे हैं:

var exception = Assert.Throws<AuthenticationException>(() => DoSomething()); 
Assert.Equal(message, exception.Message); 
+1

जोर देता है। तीर <> async विधियों के साथ अच्छी तरह से काम का निर्माण? –

+2

@CsabaToth नहीं आपको Assert.ThrowsAsync <> यह करने के लिए – jfmg

+0

मुझे यकीन है कि मुझे स्पष्ट याद आ रही है, लेकिन पहली पंक्ति में 'संदेश' तर्क क्या है? –

0

एक अपवाद अपने परीक्षण के किसी भी अन्य अपेक्षित परिणाम से अलग नहीं है। यह जांचना स्वाभाविक है कि संदेश सही है क्योंकि दो अलग-अलग संदेश एक ही अपवाद प्रकार में आ सकते हैं। हालांकि - मैं व्यक्तिगत रूप से इसे अनिवार्य रूप से नहीं सोचता, कम से कम सभी अपवादों में नहीं।

हमारी परियोजना प्रत्येक आवेदन अपवाद भी एक 'संदेश' वस्तु इसे से जुड़ी होती है, तो हम MessageId को सत्यापित केवल, हमें इसकी पुष्टि नहीं है कि संदेश तर्क सही हैं या संदेश के पाठ। उदा। यदि संदेश पाठ "गलत पैरामीटर < {0}> प्रदान किया गया था", हम यह नहीं देखते हैं कि प्रारूप {0} पर पारित तर्क अपेक्षित है - यह इरादा नहीं है। संदेश में एक अद्वितीय आईडी है - इसलिए हम सत्यापित करते हैं कि अपवाद पर MessageID 'WRONG_PARAMETER_PROVIDED' है।

1

XUnit Assert.Throws का उपयोग करता अपवाद प्रकार के लिए परीक्षण करने के लिए। यदि आपको आवश्यकता हो तो आप संदेश के खिलाफ अपवाद और जोर दे सकते हैं। मुझे लगता है कि आम तौर पर आप परीक्षण करना चाहते हैं कि अपेक्षित अपवाद फेंक दिया गया है, और सटीक संदेश वास्तव में आवश्यक नहीं है।

Assert.Throws<ArgumentNullException>() 

अपवाद हो सकता है यदि आपके पास कस्टम अपवाद है तो आप इकाई परीक्षण कर रहे हैं और आप यह सुनिश्चित करना चाहते हैं कि उत्पन्न संदेश आपको अपेक्षित है। या अगर कोई दो तरीके है कि एक ही अपवाद प्रकार फेंक दिया जा सकता है लेकिन अलग-अलग संदेश के साथ है, तो संदेश के खिलाफ जोर देते हुए मूल्यवान

+0

'थ्रो()' रिटर्न अपवाद - इसे पकड़ने की कोई आवश्यकता नहीं है। –

-1

XUnit वेबसाइट भी कहा गया है "Record.Exception" का निर्माण।

0

बेहतर रूप में यह एएए नमूने का मिलान Record.Exception विधि का उपयोग करने के लिए:

[Fact] 
    public void Divide_TwoNumbers_ExpectException() 
    { 
     var sut = new Calculator(); 
     var exception = Record.Exception(() => sut.Divide(10, 0)); 
     Assert.IsType(typeof(DivideByZeroException), exception); 
    } 

आशा इस मदद करता है ...

0

कुछ इस

var ex = Record.Exception(() => DoSomeThing()); 
Assert.IsType(typeof(ArgumentNullException), ex); 
Assert.True(ex.Message.Contains("Your exception message")); 
0

BTW की तरह, Resharper पसंद टाइपफ का उपयोग न करें और इसके बजाय Assert.IsType सुझाता है, उदाहरण के लिए

var ex = Record.Exception(() => new FooController(null, null)); 
Assert.IsType<ArgumentNullException>(ex); 
संबंधित मुद्दे