CppUnit如何实现针对异常的测试

5

我知道CppUnit可以通过以下方式测试异常:

CPPUNIT_ASSERT_THROW(expression, ExceptionType);

有人可以解释一下如何实现CPPUNIT_ASSERT_THROW()吗?

2个回答

6

CppUnit中的测试失败报告是通过抛出自定义异常类型来完成的。为了简单起见,我们在这里将其称为CppUnitException

CPPUNIT_ASSERT_THROW是一个宏,它会扩展成基本上是这样的内容:

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

如果表达式(如我们所期望的)抛出异常,我们就会进入不执行任何操作的catch块。
如果表达式没有抛出异常,程序将继续执行抛出CppUnitException的代码行,这将导致测试失败。
当然,CPPUNIT_ASSERT_THROW宏的实现实际上更为复杂,以便报告行和文件信息,但这是其工作原理的概要。

3

编辑:我已经投票支持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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接