使用CPPUnit的Printf样式断言

lar*_*pco 3 c++ cppunit

CPPUnit是否有任何功能可以让我做出printf风格的断言?例如:

CPPUNIT_ASSERT("Actual size: %d", p->GetSize(), p->GetSize() == 0);
Run Code Online (Sandbox Code Playgroud)

我知道这不是一个有效的CPPUNIT_ASSERT - 我只是以此为例.

我发现CPPUNIT_ASSERT_MESSAGE(message,condition)哪个接受一个字符串,然后条件来评估,但没有运气将值输入断言.

jxh*_*jxh 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);
Run Code Online (Sandbox Code Playgroud)

上面的宏也可以与Boost.format结合使用:

CPPUNIT_ASSERT_STREAM(boost::format("Actual size: %d") % p->GetSize(),
                      p->GetSize() == 0);
Run Code Online (Sandbox Code Playgroud)