3

CPPUnit には、printfスタイルのアサーションを実行できる機能はありますか? 例えば:

CPPUNIT_ASSERT("Actual size: %d", p->GetSize(), p->GetSize() == 0);

これが有効な CPPUNIT_ASSERT ではないことはわかっています。これは例として使用しているだけです。

文字列と評価する条件を取るものを見つけましCPPUNIT_ASSERT_MESSAGE(message,condition)たが、値をアサートに入れることができませんでした。

4

4 に答える 4

6

次のようなことができるはずです。

#define CPPUNIT_ASSERT_STREAM(MSG, CONDITION) \
    do { \
        std::ostringstream oss; \
        CPPUNIT_ASSERT_MESSAGE(\
            static_cast<std::ostringstream &>(oss << MSG).str(), \
            CONDITION); \
    } while (0)

CPPUNIT_ASSERT_STREAM("Actual size: " << p->GetSize(), p->GetSize() == 0);

上記のマクロはBoost.formatと組み合わせることもできます:

CPPUNIT_ASSERT_STREAM(boost::format("Actual size: %d") % p->GetSize(),
                      p->GetSize() == 0);
于 2013-08-19T17:13:05.660 に答える