CppUnit を使用すると、次の方法で例外をテストできることを知っています。
CPPUNIT_ASSERT_THROW(expression, ExceptionType);
誰がどのようCPPUNIT_ASSERT_THROW()
に実装されているか説明できますか?
CppUnit でのテストの失敗の報告は、カスタム例外タイプのスローによって行われます。CppUnitException
簡単にするために、ここではそれを呼び出します。
CPPUNIT_ASSERT_THROW
は、本質的に次のようなものに展開されるマクロです。
try
{
expression;
throw CppUnitException("Expected expression to throw");
}
catch( const ExceptionType & e )
{
}
スローの場合(予想どおり)、何もしないブロックexpression
に陥ります。catch
がスローされないexpression
場合、テストの失敗をトリガーするスローするコード行に実行が進みます。CppUnitException
もちろん、CPPUNIT_ASSERT_THROW
マクロの実装は実際には少し手の込んだものなので、行とファイルの情報も報告されますが、それがどのように機能するかの一般的な要点です。
編集:私はより一般的な答えであるのに対し、彼は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;