Сообщение о неудачных тестах в CppUnit осуществляется с помощью специального типа исключения. Мы назовем это CppUnitException
здесь для простоты.
CPPUNIT_ASSERT_THROW
- это макрос, который расширится до чего-то, что по сути это:
try
{
expression;
throw CppUnitException("Expected expression to throw");
}
catch( const ExceptionType & e )
{
}
Если expression
сгенерирует (как мы и ожидали), мы попадем в блок catch
, который ничего не делает.
Если expression
делает не throw, выполнение переходит к строке кода, которая выбрасывает CppUnitException
, что вызовет неудачный тест.
Конечно, реализация макроса CPPUNIT_ASSERT_THROW
на самом деле немного интереснее, так что информация о строках и файлах также сообщается, но это общая суть его работы.