5

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

CPPUNIT_ASSERT_THROW(expression, ExceptionType);

任何人都可以解释如何CPPUNIT_ASSERT_THROW()实施?

4

2 回答 2

6

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-23T09:26:53.263 回答
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;
于 2010-04-23T09:25:48.180 回答