zoukankan      html  css  js  c++  java
  • boost::test

    关于测试驱动开发,     C++的库比较多,   选择是一个问题.  
       
      Boost.Test是一个用于C++开发的测试框架,   类似的还有CPPUnit,   个人认为,   CPPUnit过多的照搬了JUnit的框架,   有比较浓厚的Java风格,   用起来总感觉有些束缚,   不是那么native.    
       
      CXXTest   我用过Symbian版本的,   好像需要Perl,   不过Symbian本身安装的时候就需要Perl,   因此对于Symbian上来说还是无所谓,而且使用Perl可以免除一些套路代码的编写.   (题外话,   Symbian啥都要,   装个Symbian   C++   SDK还要JDK1.3.2,   不知道开发J2ME是否需要安装一个GCC?   )   .    
       
      Boost.Test可以以#include一行代码的代价实现一个test-case的编写,   就测试来说,   越简单就可以越使得开发者愿意使用,    
      比起继承一个基类,   覆盖其中的一个虚拟函数来说,   Boost.Test在某些情况下就显得十分方便了.    
       
      下面是一个Hello,world般的测试例子:   测试你的系统是否1等于2   (玩笑)  
       
      #include   <boost/test/included/test_engine_monitor.hpp>                             #1  
       
      int   test_main(int   ,   char   *[])                             #2  
      {  
            BOOST_CHECK_EQUAL(1   ,   2);                           #3  
            return   1;                                                               #4  
            throw   "Ooops..";                                                 #5  
      }  
       
       
      #1     就是我前面说的一行代码的代价  
      #2     main当然已经被Boost.Test接管了,   我们就用test_main,   等着被调用.  
      #3     测试宏,   要求1   ==   2   .   当然会报错  
      #4     按照C的传统,   如果我们的test_main函数返回非0的值也是一个错误.    
      #5     异常逃出test_main外也是错误,   当然这句并不会执行.   举个例子而已.  
       
       
      然后编译运行,   例如使用VC,   那么  
       
      cl.exe     /GX   /ID:/boost   hello.cpp    
       
      D:/boost是我的Boost安装路径.   然后运行hello.exe,   结果应该不出意外是报错2个.   指出文件名,   行号等.   例如  
       
      hello.cpp(7):   error   in   "test_main_caller(   argc,   argv   )":   check   1   ==   2   failed   [1   !=   2]  
       
      D  
       
      :/boost/boost/test/impl/test_main.ipp(39):   error   in   "test_main_caller(   argc,   argv   )":   check   test_main_result   ==   0   ||   test_main_result   ==   boost::exit_success   failed  
       
       
      一个是#3的错误,   一个是#4的   .    
       
      这是最简单的情况,   适用于测试不多的情形,   如果测试比较多,   那么就应该将Boost.Test编译成一个Lib,   然后Link到这个Lib上,    
      而不是每次都整个编译一次Boost.Test,   这样可以节约编译的时间(   主要花费在#1处).    
       
      配合Boost.Build中的Bjam也是一个好主意.
  • 相关阅读:
    c#.net分类上升达人~~~呵呵。。。
    js5:框架的使用,使框架之间无痕连接
    搭建 redis 集群 (redis-cluster)
    写好用户故事的10个提示
    什么是用户故事及用户故事在敏捷开发中如何编写
    java开发手册
    性能优化指南:性能优化的一般性原则与方法
    大型网站技术架构:摘要与读书笔记
    用MyEclipse JPA创建项目
    深入了解 JPA
  • 原文地址:https://www.cnblogs.com/strinkbug/p/1359056.html
Copyright © 2011-2022 走看看