2010-04-23 12 views

Odpowiedz

3

Edytuj: Przejmuję odpowiedź Michaela Andersona, ponieważ jest on bardziej szczegółowy na temat dokładnego kodu z CppUnit, podczas gdy mój jest bardziej ogólną odpowiedzią.

W Pseudokod, to będzie coś takiego:

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

Zgłaszanie awarii testowych w CppUnit odbywa się poprzez rzucanie typu custom wyjątków. Nazywamy to tutaj CppUnitException dla uproszczenia.

CPPUNIT_ASSERT_THROW jest makro, które będą rozwijać się do czegoś, co jest w zasadzie tak:

try 
{ 
    expression; 
    throw CppUnitException("Expected expression to throw"); 
} 
catch(const ExceptionType & e) 
{ 
} 

Jeśli expression rzutów (jak my go oczekiwać), możemy wpaść w bloku catch który nic nie robi.

Jeśli expression robi nie rzucać, wykonywanie przechodzi do linii kodu, który rzuca CppUnitException co spowoduje niepowodzenie testu.

Oczywiście implementacja makra CPPUNIT_ASSERT_THROW jest w rzeczywistości nieco bardziej wyrafinowana, więc informacje o liniach i plikach są również zgłaszane, ale to ogólna istota tego działania.