Ich weiß, dass CppUnit es möglich macht, über eine Ausnahme zu testen: Wie CppUnit einen Test für eine Ausnahme implementiert
CPPUNIT_ASSERT_THROW(expression, ExceptionType);
Kann jemand erklären, wie
CPPUNIT_ASSERT_THROW()
umgesetzt wird?
Ich weiß, dass CppUnit es möglich macht, über eine Ausnahme zu testen: Wie CppUnit einen Test für eine Ausnahme implementiert
CPPUNIT_ASSERT_THROW(expression, ExceptionType);
Kann jemand erklären, wie
CPPUNIT_ASSERT_THROW()
umgesetzt wird?
Edit: Ich habe die Antwort von Michael Anderson upvoted, da er genauer über den genauen Code von CppUnit ist, während meins eine allgemeinere Antwort ist.
In Pseudo-Code, wird es so etwas wie dieses:
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;
Berichterstattung von Testfehler in CppUnit über Werfen einer benutzerdefinierten Ausnahme Typ. Wir nennen das CppUnitException
hier zur Vereinfachung.
CPPUNIT_ASSERT_THROW
ein Makro, das auf etwas erweitern, die im Wesentlichen das ist:
try
{
expression;
throw CppUnitException("Expected expression to throw");
}
catch(const ExceptionType & e)
{
}
Wenn expression
wirft (wie wir es erwarten würden), fallen wir in den catch
Block, der nichts tut.
Wenn expression
tut nicht Wurf, geht die Ausführung zu der Codezeile, die CppUnitException
wirft, die einen Testfehler auslösen.
Natürlich ist die Implementierung des CPPUNIT_ASSERT_THROW
Makros tatsächlich ein bisschen schicker, so dass Zeilen- und Dateiinformationen ebenfalls gemeldet werden, aber das ist der allgemeine Kern dessen, wie es funktioniert.