我在 QT C++ 世界中陈述。我正在使用 QTest 类进行 TDD。我想验证在某些情况下,我的测试类是否引发了异常。使用谷歌测试,我会使用类似的东西:
EXPECT_THROW(A(NULL), nullPointerException);
QTest 中是否存在类似此功能的功能?至少有一种方法可以做到吗?
谢谢!
由于 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
.