so che CppUnit permette di testare una deroga via:Come CppUnit implementa un test per un'eccezione
CPPUNIT_ASSERT_THROW(expression, ExceptionType);
Qualcuno può spiegare come CPPUNIT_ASSERT_THROW()
viene implementato?
so che CppUnit permette di testare una deroga via:Come CppUnit implementa un test per un'eccezione
CPPUNIT_ASSERT_THROW(expression, ExceptionType);
Qualcuno può spiegare come CPPUNIT_ASSERT_THROW()
viene implementato?
Modifica: Ho svalutato la risposta di Michael Anderson, poiché è più specifico sul codice esatto da CppUnit, mentre il mio è una risposta più generale.
In pseudocodice, sarà qualcosa di simile:
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;
Segnalazione dei fallimenti dei test in CppUnit avviene tramite lancio di un tipo di eccezione personalizzato. Chiameremo questo CppUnitException
qui per semplicità.
CPPUNIT_ASSERT_THROW
è una macro che si espanderà a qualcosa che è essenzialmente questo:
try
{
expression;
throw CppUnitException("Expected expression to throw");
}
catch(const ExceptionType & e)
{
}
Se expression
tiri (come ci aspettiamo che), cadiamo nel blocco catch
che non fa niente.
Se expression
fa non tiro, l'esecuzione procede alla riga di codice che getta CppUnitException
che attiverà il fallimento del test.
Ovviamente, l'implementazione della macro CPPUNIT_ASSERT_THROW
è in realtà un po 'più elaborata in modo che vengano riportate anche le informazioni su riga e file, ma questo è l'essenza generale di come funziona.