2010-04-23 21 views

Trả lời

3

Chỉnh sửa: Tôi đã upvoted câu trả lời của Michael Anderson, vì ông cụ thể hơn về mã chính xác từ CppUnit, trong khi tôi là một câu trả lời chung chung hơn.

Trong giả, nó sẽ có một cái gì đó như thế này:

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

Báo cáo thất bại trong thử nghiệm CppUnit được thực hiện thông qua ném của một kiểu tùy chỉnh ngoại lệ. Chúng tôi sẽ gọi số CppUnitException ở đây để đơn giản.

CPPUNIT_ASSERT_THROW là một macro mà sẽ mở rộng ra một cái gì đó về cơ bản đây là:

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

Nếu expression ném (như chúng ta mong đợi nó), chúng tôi rơi vào khối catch mà không làm gì.

Nếu expression thực hiện không ném, thực hiện tiếp tục đến dòng mã ném CppUnitException sẽ kích hoạt lỗi kiểm tra.

Tất nhiên, việc triển khai macro CPPUNIT_ASSERT_THROW thực sự là một chút fancier để thông tin về dòng và tệp cũng được báo cáo, nhưng đó là ý chính của cách hoạt động.

Các vấn đề liên quan