10

私はQT C++の世界で述べています。QTest クラスを使用して TDD を実行しています。特定の条件下で、テスト対象のクラスによって例外がスローされることを確認したいと考えています。Google テストを使用して、次のようなものを使用します。

EXPECT_THROW(A(NULL), nullPointerException);

QTestにこの機能のようなものはありますか? 少なくともそれを行う方法はありますか?

ありがとう!

4

2 に答える 2

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 に答える