10

我在 QT C++ 世界中陈述。我正在使用 QTest 类进行 TDD。我想验证在某些情况下,我的测试类是否引发了异常。使用谷歌测试,我会使用类似的东西:

EXPECT_THROW(A(NULL), nullPointerException);

QTest 中是否存在类似此功能的功能?至少有一种方法可以做到吗?

谢谢!

4

2 回答 2

13

由于 Qt5.3 QTest 提供了一个宏QVERIFY_EXCEPTION_THROWN来提供缺失的功能。

于 2014-11-30T12:17:39.333 回答
7

这个宏演示了这个原理。

比较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.

于 2013-02-20T13:58:57.057 回答