2010-04-23 8 views
6

के लिए एक परीक्षण को लागू करता है मुझे पता है कि CppUnit के माध्यम से एक अपवाद के लिए परीक्षण करने के लिए संभव बनाता है:कैसे CppUnit एक अपवाद

CPPUNIT_ASSERT_THROW(expression, ExceptionType); 

किसी को भी व्याख्या कर सकते हैं कि कैसे CPPUNIT_ASSERT_THROW() कार्यान्वित किया जाता है?

उत्तर

3

संपादित करें: मैं, क्योंकि वह CppUnit से सटीक कोड के बारे में अधिक विशिष्ट है, माइकल एंडरसन की जवाब upvoted गया है, जबकि मेरा एक अधिक सामान्य जवाब है।

try 
    { 
    // Test code that should throw  
    } 
catch(ExceptionType e) 
    { 
    // Correct exception - handle test success 
    return; 
    } 
catch(...) 
    { 
    // Wrong exception, handle test failure. 
    return; 
    } 
// No exception, handle test failure. 
return; 
6

CppUnit में परीक्षण विफलताओं की रिपोर्टिंग एक कस्टम अपवाद प्रकार के फेंक के माध्यम से किया जाता है:

स्यूडोकोड में, यह कुछ इस तरह हो जाएगा। हम जानते हैं कि यहाँ CppUnitException सादगी के लिए फोन करता हूँ।

CPPUNIT_ASSERT_THROW एक मैक्रो है कि कुछ अनिवार्य रूप से यह है कि करने के लिए विस्तार होगा है:

try 
{ 
    expression; 
    throw CppUnitException("Expected expression to throw"); 
} 
catch(const ExceptionType & e) 
{ 
} 

तो expression फेंकता है (जैसा कि हम यह करने के लिए उम्मीद थी), हम catch ब्लॉक जो कुछ नहीं करता है में आते हैं।

तो expression करता नहीं फेंक, कोड की पंक्ति है कि CppUnitException जो एक परीक्षण की विफलता को गति प्रदान करेगा फेंकता के निष्पादन आय।

बेशक, CPPUNIT_ASSERT_THROW मैक्रो का कार्यान्वयन वास्तव में थोड़ा सा प्रशंसक है ताकि रेखा और फ़ाइल की जानकारी भी रिपोर्ट की जा सके, लेकिन यह सामान्य काम है कि यह कैसे काम करता है।

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