如何用QTest验证是否抛出了异常?

时间:2013-02-20 11:43:25

标签: qt qtestlib

我在QT C ++世界中表示。我正在使用QTest类进行TDD。我想验证在某些情况下我的类正在测试中抛出异常。使用谷歌测试,我会使用类似的东西:

EXPECT_THROW(A(NULL), nullPointerException);

QTest中是否存在类似此功能的内容?至少有办法吗?

谢谢!

2 个答案:

答案 0 :(得分:11)

由于Qt5.3 QTest提供了一个提供缺失特征的宏QVERIFY_EXCEPTION_THROWN

答案 1 :(得分:6)

这个宏证明了原理。

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强制失败。