CppUnit如何实现异常测试

时间:2010-04-23 09:11:36

标签: c++ cppunit

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

CPPUNIT_ASSERT_THROW(expression, ExceptionType);

有人可以解释CPPUNIT_ASSERT_THROW()的实施方式吗?

2 个答案:

答案 0 :(得分: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宏的实现实际上有点漂亮,因此也报告了行和文件信息,但这是它如何工作的一般要点。

答案 1 :(得分: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;