注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云水居

云在青山水在天,人在江湖不得闲

 
 
 

日志

 
 

C++单元测试:cppunit  

2011-07-01 01:37:17|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

查看全文


单元测试还是要认真做的, 做单元测试还是很烦的, cppunit 还是很强大的.
CPPUNIT 有几类对象, 主要分三类,
一是运行管理: 包括输出格式(html/xml...), 运行方式(GUI, CLI...), 输出文件(标准输出...)
二是Case管理: 主要分三级, Registry, TestSuite 和 TestCase.
一般每个测试类是一个TestSuite, 测试类中的每个测试方法是一个TestCase
若干TestCase组成一个TestSuite
然后TestSuite可以注册一个名称, 也可以注册到全局默认名称, 也可以两个都注册..
这些都可以使用cppunit提供的宏实现.
三是Case编写: 主要是Case的继承关系, 条件判断等.
一般继承自TestFixture即可, 可以使用CPPUNIT_ASSERT(condition), CPPUNIT_ASSERT_MESSAGE(msg, cond)等.

这里提供一个最简单的使用方法: 将运行管理的工作封装到"万能的主函数中", 然后用一种通用的方式编写Case.
依赖关系是:
main中通过Case名称或默认名称建的Suite, 而Case通过宏注册名称或默认名称,
然后从Suite中寻找Case, Case通过宏注册到Suite中.

0.1. 万能的主函数,
#include "test_inc.h"
int main(int argc, char *argv[]){
    CppUnit::TestResult result;
    CppUnit::TestResultCollector rc;
    result.addListener (&rc);
    CppUnit::TestRunner run;
    if(argc == 1){   //如果没有参数,则运行所有的Case
        run.addTest (CppUnit::TestFactoryRegistry::getRegistry().makeTest());
    }  
    for(int i = 1; i<argc; i++){   //如果有参数,则运行参数指定的Case
        run.addTest (CppUnit::TestFactoryRegistry::getRegistry(argv[i]).makeTest());
    }  
    run.run (result);
    CppUnit::TextOutputter outputter (&rc, CppUnit::stdCOut());
    outputter.write ();
    return rc.wasSuccessful ()? 0 : 1;
}
0.2. 万能的头文件
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/TestResult.h>
#include <cppunit/Tes

查看全文

  评论这张
 
阅读(1321)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017