当定义了宏 BOOST_ENABLE_ASSERT_HANDLER 后,使用 BOOST_ASSERT() 断言失败后,会调用 boost::assertion_failed() 函数,该函数声明在 boost 名字空间内,但特意被设计为没有实现。
#include <iostream> #include <boost/format.hpp> namespace boost { void assertion_failed(char const* expr,char const * function,char const* file,long line) { boost::format fmt("Expression:%s\nFunciton:%s\nFile:%s\nLine:%s\n"); fmt %expr %function %file %line; std::cout<<fmt; } } #define BOOST_ENABLE_ASSERT_HANDLER #include <string> #include <cassert> #include <boost/assert.hpp> int main() { assert(1 == 1); //实际上是一个宏,尽管它不是大写。编译时加上 -DNDEBUG 无效 std::string str = "Hello"; BOOST_ASSERT(str.size() == 0 && "str's size is 0."); //效果同于assert(),仅在debug模式下有效。&& 后面的内容相当于注释,方便调试 }
#define BOOST_TEST_MAIN #include <boost/test/included/unit_test.hpp> BOOST_AUTO_TEST_SUITE(test_suite_1) BOOST_AUTO_TEST_CASE(test_case_1) { BOOST_CHECK(1); BOOST_CHECK_EQUAL(1,1); } BOOST_AUTO_TEST_CASE(test_case_2) { BOOST_CHECK(1); BOOST_CHECK_EQUAL(1,1); } BOOST_AUTO_TEST_SUITE_END()