2012-03-21 15 views
41

मैं यह सुनिश्चित करने के लिए एनयूनीट परीक्षण बनाना चाहता हूं कि मेरा कार्य अपवाद नहीं फेंकता है। क्या ऐसा करने के लिए कोई विशिष्ट तरीका है, या मुझे सिर्फNUnit: किसी भी अपेक्षित अपवाद के साथ परीक्षण

[Test] 
public void noExceptionTest() { 
    testedFunction(); 
} 

और यदि कोई अपवाद फेंक दिया गया तो यह सफल होगा?

+2

क्या वाकई आप परीक्षण करना चाहते हैं? आपको एहसास है कि अगर परीक्षण किया गया है तो एक नो-ऑप है, यह परीक्षण पास करेगा। – Martijn

+0

क्या आपकी विधि में फेंकने की कोई विशेष आवश्यकता नहीं है? या यह * मेरे कोड काम की भावना में किया गया है क्योंकि यह * फेंक नहीं है? यदि बाद वाला, आप माइगथ [उन] को जांचना चाहते हैं (http://stackoverflow.com/questions/8788558/should-i-test-that-methods-dont-throw-exceptions) [दो] (http: // stackoverflow.com/questions/9417213/c-how-do-i-check-no-exception-occurred-in-my-unit-test) प्रश्न सामान्य रूप से आप ऐसा क्यों नहीं करते हैं। आप इस तरह के परीक्षण से कुछ भी कम नहीं मिलता है। –

+1

@jimmy_keen एक असाधारण मामले के रूप में, उस कॉलिंग का निपटान करने के लिए प्रयोग किया जाता है() दूसरी बार – Gareth

उत्तर

70
Assert.DoesNotThrow(() => { /* custom code block here*/}); 

या सिर्फ विधि

Assert.DoesNotThrow(() => CallMymethod()); 

अधिक जानकारी के लिए NUnit Exception Asserts

2

हां, कोई फेंक दिया अपवाद -> परीक्षण पास। यदि फिर से फेंकने के बिना कोशिश-पकड़ ब्लॉक था, तो यह भी गुजर जाएगा।

2

आप सही कर रहे हैं देखते हैं। यदि कोई अपवाद है तो परीक्षण विफल हो जाएगा।

जब तक आप

[ExpectedException(typeof(YourException)) ] 
public void TestMethod() 
{ 
    ... 
} 

निर्दिष्ट या के रूप में @sll कहते हैं, आप अधिक विशिष्ट

Assert.DoesNotThrow 

assertion का उपयोग करें।

4

अपवाद फेंकना कार्रवाई का सामान्य तरीका नहीं है। आपका परीक्षण सफलतापूर्वक सत्यापित करेगा कि एक अपवाद फेंक दिया नहीं गया है।

1

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

आपका कोड ठीक से काम कर रहा प्रतीत होता है, दूसरी तरफ, केवल अपवादों की जांच करना यूनिट परीक्षण के लिए उचित तरीका नहीं हो सकता है। यूनिट परीक्षणों में, आम तौर पर आप कुछ आउटपुट (अपेक्षित मान) की अपेक्षा करते हैं, आपके पास कुछ वास्तविक आउटपुट (वास्तविक मान) हैं और आप जोर देते हैं कि अपेक्षित और वास्तविक मान समान हैं।

8

NUnit 3.0 Constraint Model प्रकार का उपयोग करते हुए इस प्रकार के दावे के रूप में इस कोड दिखेगा:

Assert.That(() => SomeMethod(actual), Throws.Nothing);

यह उदाहरण NUnit wiki से लिया जाता है।

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