2010-04-23 34 views
6

測試我知道的CppUnit能夠測試異常經:的CppUnit如何實現對異常

CPPUNIT_ASSERT_THROW(expression, ExceptionType); 

任何人都可以解釋如何CPPUNIT_ASSERT_THROW()實現?

回答

3

編輯:我已經提出了邁克爾安德森的回答,因爲他對CppUnit的確切代碼更具體,而我的答案更一般。

僞代碼,它會是這樣的:

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確實是而不是 throw,執行過程繼續執行到將觸發測試失敗的代碼行CppUnitException

當然,CPPUNIT_ASSERT_THROW宏的實現實際上更有趣,因此線條和文件信息也被報告,但這是它如何工作的一般要點。