2010-04-23 13 views

risposta

3

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; 
6

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.