如何使用boost.test

来源:互联网 发布:怎么查淘宝宝贝降权 编辑:程序博客网 时间:2024/05/18 22:12

boost.test能做什么?

该库仅能进行UT级别的测试,也能进行模块级别的测试(MT, Module Test),目前在我们的基站的OM端是进行MT级别的测试。

如何写测试用例?

且看一个例子:

BOOST_AUTO_TEST_SUITE(CONF_Validator_TEST_SUITE)BOOST_AUTO_TEST_CASE(UC005_VerLicParamsInConfFile_RAN2126_FeatInScfOn_LicEnabled){    UC005_Fixture testCase;    sendEvStartLicenceHandlingReq(testCase.pClient);    testCase.pClient->opSendevVerifyLicenceParametersInConfFileReq("SCFC", "_1.xml", "rom/", true, CONF_Validator_IF::ePhase_Activation);    LOG_CHECK << regex("CConf_Licence.*Licence rfSharingEnabled in SCF file is ON") << WAIT();    LOG_CHECK << regex("CConf_Licence.*evLicenceRequestResp for feature 1920 received from OPT with success code 1.") << WAIT();    LOG_CHECK << regex("CConf_Licence.*evLicenceRequestResponse received with status Enabled") << WAIT();    LOG_CHECK << "Client: evVerifyLicenceParametersInConfFileReply received with status OK" << WAIT();    BOOST_CHECK(CheckDB::checkBSParamInDB("ForOMrfSharingEnabled", "true"));}BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE(CONF_Validator_TEST_SUITE)定义了一个测试套,测试套可以保护多个测试用例,以BOOST_AUTO_TEST_SUITE_END()语句作为结束。BOOST_AUTO_TEST_CASE定义了一个测试用例,用例的名称是UC005_VerLicParamsInConfFile_RAN2126_FeatInScfOn_LicEnabled。在用例里使用了LOG_CHECK来检查LOG的输出。在BOOST_CHECK宏里调用了CheckDB::checkBSParamInDB来检查该被测程序的某些行为。当然boost.test库定义了很多check函数。

测试是如何进行的?

怎么搭建boost测试环境就不再描述了,目前我们BTSOM项目中是将被测模块编译成库(lib库),然后将MT代码和该lib库编译生成一个exe文件。至于被测模块的在MT中是如何初始化的?且看以下代码:
bool init(){    framework::master_test_suite().p_name.value = "CM";    if (OXF::init(0, NULL, 0, NULL,                  OMTimerManagerDefaults::defaultTicktime,                  OMTimerManagerDefaults::defaultMaxTM, true))    {        OXF::start(true);    }    else    {        return false;    }    sw_conf_table[FEAT_DBG_Generic] = 1;    sw_conf_table[FEAT_DBG_PrintFilter] = 5;    sw_conf_table[FEAT_DBG_BTSOM_CDM_PRN] = 2;    //sw_conf_table[FEAT_DBG_BTSOM_ALMAG] = 1;    //sw_conf_table[FEAT_DBG_Rpmag] = 2;    //sw_conf_table[FEAT_DBG_ADSER] = 1;    //sw_conf_table[FEAT_DBG_BTSOM_APW] = 2;    sw_conf_table[FEAT_DBG_DB_Change_Log] = 2;    //sw_conf_table[FEAT_DBG_Enable_DbgPrint_to_BtsLog_PRN] = 1;    sw_conf_table[FEAT_DBG_BTSOM_CFM_PRN] = 2;    sw_conf_table[FEAT_DBG_BTSOM_RADPARAMS_PRN] = 3;    //Registry::Instance(1);    Registry::Instance(HWW::omGetCurrentBoard());        SSW_SupportSoftware::init();    //start DB    startDB(cOMCoreDBM);    DBW::DbWInitializer::init();    DBW::DbWInitializer::dbCreated();    DBManager *dbm = getDBM();    return true;}int main(int argc, char* argv[]){    return boostMT_init(argc, argv, init);}
init 函数做了我们被测模块的初始化工作。
与该被测模块有联系的其它模块我们可以写一些模拟器,我们控制该模拟器的行为来辅助我们的测试,当然这些模拟器的代码需要一起包含在这个MT工程代码里。

MT用例是如何运行起来的?

LOG的check是如何实现的?

关于以上两个问题在接下来的几篇blog中会有分晓。




原创粉丝点击