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からの正確なコードについてより具体的であるため、Michael Andersonの答えを支持しました。

擬似コードでは、次のようになります。

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 に答える