• C++编程:C++ 多文件测试方案


    如何分文件编写Boost Test的test case


    问题阐述

    在使用Boost Test编写测试模块时,首先需要定义#define BOOST_TEST_MODULE example或者#define BOOST_AUTO_TEST_MAIN,否则测试模块初始化函数需要手动实现;

    然后宏BOOST_AUTO_TEST_SUITE(test_suite)将创建一个名为test_suite的测试套件,并将其加入到测试模块中。宏BOOST_AUTO_TEST_CASE(test_case)将创建一个名为test_case的测试用例,并将其加入到测试套件test_suite中。 

    就像这样:

    test_main.cpp

    1. #define BOOST_TEST_MODULE example
    2. #include<boost/test/included/unit_test.hpp>
    3. BOOST_AUTO_TEST_SUITE(test_suite1)
    4. BOOST_AUTO_TEST_CASE(test_case1)
    5. {
    6. BOOST_TEST_MESSAGE("running test_case1");
    7. BOOST_TEST(true);
    8. }
    9. BOOST_AUTO_TEST_CASE(test_case2)
    10. {
    11. BOOST_TEST_MESSAGE("running test_case2");
    12. BOOST_TEST(true);
    13. }
    14. BOOST_AUTO_TEST_SUITE_END()

    关于测试模块常犯的一个错误是在不同的测试文件中定义不同的#define BOOST_TEST_MODULE example,最后将导致multiple definition of ‘init_unit_test_suite(int, char**)错误,原因是在一个测试程序中只允许存在一个定义一个测试模块。
    那么很多归纳狂魔很不开心了,既然不能放在不同的测试文件里,我一个文件塞那么多测试代码不仅很难查找,而且不利于teamwork。就不能一个测试套件对应一个文件吗?

    解决方案

    方法当然有,利用#include的预编译功能就可以了。把所有测试套件写成.h头文件,在test_main.cpp中#include进来,就可以实现你的归纳梦了!这样多个文件也方便团队多人协同编写测试代码,岂不快哉?
    test1.h

    1. #ifndef BOOSTLEARN_TEST1_H
    2. #define BOOSTLEARN_TEST1_H
    3. #include"boost/test/unit_test.hpp"
    4. BOOST_AUTO_TEST_SUITE( s_suit1 )
    5. BOOST_AUTO_TEST_CASE( t_case1 )
    6. {
    7. BOOST_CHECK_EQUAL(1,1);
    8. }
    9. BOOST_AUTO_TEST_CASE( t_case2 )
    10. {
    11. BOOST_CHECK_EQUAL(3,1);
    12. }
    13. BOOST_AUTO_TEST_SUITE_END()
    14. #endif//BOOSTLEARN_TEST1_H
     
    test2.h
    1. #ifndef BOOSTLEARN_TEST2_H
    2. #define BOOSTLEARN_TEST2_H
    3. #include"boost/test/unit_test.hpp"
    4. BOOST_AUTO_TEST_SUITE( s_suit2 )
    5. BOOST_AUTO_TEST_CASE( t_case1 )
    6. {
    7. BOOST_CHECK_EQUAL(1,1);
    8. }
    9. BOOST_AUTO_TEST_CASE( t_case2 )
    10. {
    11. BOOST_CHECK_EQUAL(3,1);
    12. }
    13. BOOST_AUTO_TEST_SUITE_END()
    14. #endif//BOOSTLEARN_TEST2_H
     
    TestCommon.h
    1. #ifndef BOOSTLEARN_TESTCOMMON_H
    2. #define BOOSTLEARN_TESTCOMMON_H
    3. #define BOOST_TEST_MODULE TestUnit
    4. //请在下面添加每一个测试单元的头文件----
    5. #include"test1.h"
    6. #include"test2.h"
    7. //...add here
    8. //---------------------------------
    9. #endif//BOOSTLEARN_TESTCOMMON_H

    TestUnit.cpp
    1. #include"TestCommon.h"
    运行结果
     



  • 相关阅读:
    jquery 不支持$.browser
    js 双向绑定
    css3 省略号
    js生成txt文件
    Browser-sync
    Generator & yield write in sync way
    Charles
    缓动函数与动画
    让Safari使用Chrome的代理
    React 同构
  • 原文地址:https://www.cnblogs.com/xujintao/p/8325116.html
Copyright © 2020-2023  润新知