《BOOST程序库完全开发指南》 第06章 正确性与测试

当定义了宏 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()

 

posted @ 2012-10-24 12:08  轻典  阅读(333)  评论(0编辑  收藏  举报