Как проверить с помощью 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,

Другие вопросы по тегам