ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Boost.Test(转)

Boost.Test(转)

原创 Linux操作系统 作者:jcszjswkzhou 时间:2019-05-07 22:36:06 0 删除 编辑

关于测试驱动开发, 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 #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也是一个好主意.


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126463/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-29

  • 博文量
    2772
  • 访问量
    2038205