zoukankan      html  css  js  c++  java
  • boost单元测试框架

    头文件:

    #include <boost/test/unit_test.hpp>

    编译加:-lboost_unit_test_framework

    单元测试:

     需要定义BOOST_TEST_MAIN做为主测试入口 

    http://www.ibm.com/developerworks/cn/aix/library/au-ctools1_boost/

    使用注意:

    #define BOOST_TEST_MAIN  //一定要有,且要放在unit_tset.hpp的前面,否则:(unit_test_main.obj) : error LNK2019: 无法解析的外部符号 "class boost::unit_test::test_suite * __
     
    #include <boost/test/unit_test.hpp>


    Boost库单元测试使用配置
    为了使用方便,一般编译为静态库。以便于最终发布程序,不需要打包Boost的Dll。且根据实际编译情况,发现静态库编译速度较快。
    生成文件描述。
    文件名含义编译选项
    libboost_unit_test_framework-vc80-mt-gd-1_48.lib 静态库,多线程,调试版本 
    使用静态调试版本C运行时库(LIBCMTD.LIB和LIBCPMTD.LIB)
    /MTd
    libboost_unit_test_framework-vc80-mt-1_48.lib 静态库,多线程 
    使用静态版本C运行时库(LIBCMT.LIB和LIBCPMT.LIB)
    /MT
    boost_unit_test_framework-vc80-mt-gd-1_48.lib 静态库,多线程,调试版本 
    使用动态调试版本C运行时库(MSVCRTD.LIB和MSVCPRTD.LIB)
    /MDd
    boost_unit_test_framework-vc80-mt-1_48.lib 静态库,多线程 
    使用动态版本C运行时库(MSVCRT.LIB和MSVCPRT.LIB)
    /MD


    5 Boost.test调用示例
    Boost库的使用学习,见自带index.htm,本例路径为D:oost_1_48_0index.htm。
    参考:http://www.cnblogs.com/zhihuichien/archive/2010/09/01/1815185.html
    参考:http://www.oschina.net/code/snippet_126720_4924


    关于单元测试的总结。

    • 需求确定后,先写单元测试代码,测试代码随需求而变。
    • 测试代码着眼于被测代码应该如何运行,而不是复现被测代码是如何实现的。
    • 能否写好单元测试代码表示对需求的理解是否到位。
    • 如果每个模块都经过单元测试,那么集成后出现的问题就可以确认为是模块间传递消息时出现的问题,从而将bug隔离出来,这是单元测试的真正亮点。

    创建示例工程。

    • vs2005创建win32控制台工程,例工程名为BoostTest。
    • 配置头文件路径。

    ConfigurationProperties->C/C++->General->Additional Include Directories路径设置。

    对应本例,设置为D:oost_1_48_0。

    •  Lib库路径配置

    Configuration Properties->Linker->General->AdditionalLibrary Directories路径设置。

    对应本例,设置为D:oost_1_48_0stagelib。

    • 依赖库设置

    设置项ConfigurationProperties->Linker->Input->Additional Dependencies。

    Debug为:libboost_unit_test_framework-vc80-mt-gd-1_48.lib。

    Release为:libboost_unit_test_framework-vc80-mt-1_48.lib。


    BoostTest.cpp源码如下:
    #define BOOST_TEST_MAIN
    #include <boost/test/included/unit_test.hpp>
    #include <boost/assign.hpp>
    #include <iostream>
    using namespace std;


    struct global_fixture
    {
        global_fixture() { cout << ("global setup ") << endl; }
        ~global_fixture() { cout << ("global teardown ") << endl; }
    };


    BOOST_GLOBAL_FIXTURE(global_fixture);


    struct assign_fixture
    {
        assign_fixture() { cout << ("suit setup ") << endl; }
        ~assign_fixture() {cout << ("suit teardown ") << endl; }
        vector<int> v;
    }; 


    BOOST_FIXTURE_TEST_SUITE(s_assign, assign_fixture)


    BOOST_AUTO_TEST_CASE(t_assign_1)
    {
        using namespace boost::assign;


        v += 1,2,3,4;
        BOOST_CHECK_EQUAL(v.size(), 4);
        BOOST_CHECK_EQUAL(v[2], 4);
    }


    BOOST_AUTO_TEST_SUITE_END()

    本例是个简单的单元测试。
    用来检测vector容器,条目数是否为4,以及第三个值是否为4。


    运行程序,输出信息为:error in "t_assign_1": check v[2] == 4 failed [3 != 4]。
    检测出第三个值不为4。

  • 相关阅读:
    「运维之美」技术周刊 ( 第 2 期 )
    Win10下MySQL(5.7和8两个版本)忘记root密码的解决办法
    SpringBoot使用自定义注解实现简单参数加密解密(注解+HandlerMethodArgumentResolver)
    Set的交集、差集踩坑记录
    RocketMQ控制台命令
    IDEA远程连接和上传文件到服务器
    记录一下JProfiler的使用
    点击验证码刷新的实现
    算法学习:我终于明白二分查找的时间复杂度为什么是O(logn)了
    Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
  • 原文地址:https://www.cnblogs.com/youxin/p/4451338.html
Copyright © 2011-2022 走看看