Как проверить с помощью QTest, что выброшено исключение?
Я заявляю в мире QT C++. Я делаю TDD с использованием класса QTest. Я хочу убедиться, что в определенных условиях исключение выдается моим тестируемым классом. Используя Google Test, я бы использовал что-то вроде:
EXPECT_THROW(A(NULL), nullPointerException);
Существует ли что-то подобное в QTest? О, по крайней мере, способ сделать это?
Спасибо!
2 ответа
Начиная с Qt5.3, QTest предоставляет макрос QVERIFY_EXCEPTION_THROWN, который предоставляет отсутствующую функцию.
Этот макрос демонстрирует принцип.
typeid
Сравнение - это особый случай использования, поэтому он может или не может использовать его - он позволяет макросу "провалить" тест, даже если выброшенное исключение получено из того, с которым вы тестируете. Часто этого не хочется, но я все равно бросил!
#define EXPECT_THROW( func, exceptionClass ) \
{ \
bool caught = false; \
try { \
(func); \
} catch ( exceptionClass& e ) { \
if ( typeid( e ) == typeid( exceptionClass ) ) { \
cout << "Caught" << endl; \
} else { \
cout << "Derived exception caught" << endl; \
} \
caught = true; \
} catch ( ... ) {} \
if ( !caught ) { cout << "Nothing thrown" << endl; } \
};
void throwBad()
{
throw std::bad_exception();
}
void throwNothing()
{
}
int main() {
EXPECT_THROW( throwBad(), std::bad_exception )
EXPECT_THROW( throwBad(), std::exception )
EXPECT_THROW( throwNothing(), std::exception )
return EXIT_SUCCESS;
}
Возвращает:
Caught Derived exception caught Nothing thrown
Чтобы адаптировать его для QTest
вам нужно будет заставить неудачу с QFAIL
,