我知道CppUnit可以通过以下方式测试异常:
CPPUNIT_ASSERT_THROW(expression, ExceptionType);
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释如何CPPUNIT_ASSERT_THROW()实施?
通过抛出自定义异常类型来报告CppUnit中的测试失败.CppUnitException为简单起见,我们在这里称之为.
CPPUNIT_ASSERT_THROW 是一个宏将扩展到基本上这样的东西:
try
{
expression;
throw CppUnitException("Expected expression to throw");
}
catch( const ExceptionType & e )
{
}
Run Code Online (Sandbox Code Playgroud)
如果expression抛出(正如我们所期望的那样),我们会陷入无效的catch区块.
如果expression没有不丢,执行过程进行到的代码抛出的线CppUnitException,其将触发检测失败.
当然,CPPUNIT_ASSERT_THROW宏的实现实际上有点漂亮,因此也报告了行和文件信息,但这是它如何工作的一般要点.
编辑:我赞成 Michael Anderson 的答案,因为他对 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;
Run Code Online (Sandbox Code Playgroud)