我在QT C ++世界中表示。我正在使用QTest类进行TDD。我想验证在某些情况下我的类正在测试中抛出异常。使用谷歌测试,我会使用类似的东西:
EXPECT_THROW(A(NULL), nullPointerException);
QTest中是否存在类似此功能的内容?至少有办法吗?
谢谢!
答案 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
强制失败。