私はQT C++の世界で述べています。QTest クラスを使用して TDD を実行しています。特定の条件下で、テスト対象のクラスによって例外がスローされることを確認したいと考えています。Google テストを使用して、次のようなものを使用します。
EXPECT_THROW(A(NULL), nullPointerException);
QTestにこの機能のようなものはありますか? 少なくともそれを行う方法はありますか?
ありがとう!
このマクロは原理を示しています。
比較は特別な使用例であるため、使用する場合と使用しない場合があります。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
。