我知道CppUnit可以通过以下方式测试异常:
CPPUNIT_ASSERT_THROW(expression, ExceptionType);有人能解释一下CPPUNIT_ASSERT_THROW()是如何实现的吗?
发布于 2010-04-23 17:26:53
CppUnit中的测试失败报告是通过抛出自定义异常类型来完成的。为了简单起见,我们在这里将其称为CppUnitException。
CPPUNIT_ASSERT_THROW是一个宏,它将扩展为本质上是这样的东西:
try
{
expression;
throw CppUnitException("Expected expression to throw");
}
catch( const ExceptionType & e )
{
}如果expression抛出(正如我们预期的那样),我们将陷入catch块,它什么也不做。
如果expression没有抛出,执行将继续到抛出CppUnitException的代码行,这将触发测试失败。
当然,CPPUNIT_ASSERT_THROW宏的实现实际上有点花哨,因此也报告了行和文件信息,但这是它的工作原理的一般要点。
发布于 2010-04-23 17:25:48
编辑:我推荐了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;https://stackoverflow.com/questions/2697380
复制相似问题