单元测试乱弹(一):悲剧的测试工具

项目要结束了,按流程需要做单元测试并提交测试报告。本来公司内部有测试工具,拿过来直接用就是。但实际上一堆问题,在这里不吐不快。

 

(1)首先尝试的是测试工具XXTest,但竟然编译不通过。打开代码一看,顿时跪倒:

1         MTString log = "";
2         log += "Time: ";
3         log += (int)MTTime::GetTime().GetStr();

string居然强制转为int!

 

1     char buff[4096];
2     memset(buff, 0x00, 4096);
3     sprintf(buff, "%d",(int) ptr);

打印指针,竟然也强制转为int. 不会用 %p么?

 

告诉支持人员编译通不过,他们回复:“我这里好的很,这是外国人写的!”。

我推测,可能是编译环境不一致引起的,也许这样的代码在他们的机器上可以通过,但在我这边却肯定是有问题的(后来证实了这一点,他们的编译器是4.1,而我们的是g++ (Debian 4.7.1-7) 4.7.1)。

还好问题不大,就自己先fix了。

 

继续编译,报错:

1 /usr/bin/ld: Warning: size of symbol `_ZN8MTObjectD1Ev' changed from 8 in /tmp/cc3dhwh4.o to 14 in ./lib/libMTCore.a(MTCore-Linux.o)
2 /usr/bin/ld: Warning: size of symbol `_ZN12MTRepositoryD1Ev' changed from 36 in /tmp/cc3dhwh4.o to 44 in ./lib/libMTCore.a(MTCore-Linux.o)
3 /usr/bin/ld: i386 architecture of input file `./lib/libMTCore.a(MTCore-Linux.o)' is incompatible with i386:x86-64 output
4 ./lib/libMTCore.a(MTCore-Linux.o): In function `MTList::AddBefore(void*)':
5 /home/MyTest_Linux_C++/MTCore/MTList.cpp:148: undefined reference to `operator new(unsigned int)'
6 ./lib/libMTCore.a(MTCore-Linux.o): In function `MTList::AddAfter(void*)':
7 /home/MyTest_Linux_C++/MTCore/MTList.cpp:100: undefined reference to `operator new(unsigned int)'

似乎是“libMTCore.a”不兼容,这个库是支持部门事先编译好提供给我们的。

一问下来,他们是在32位Ubuntu上编译的,而我们是在64位Debian上编译的(项目要求的,无法更改),能链接的上才怪。

问是否能提供64位版本,被告知该程序已不再维护。

 

(2)还好有替代工具XXX, 但是文档看下来,复杂无比,而操作过程语焉不详,无从下手。

询问支持人员,被告知没有人用过,需要自己摸索,有问题需要HQ(总部)支持。这是个费时费力的活,而我们只有一周的时间,可能工具还没学会,就得交报告。因此,头儿决定:不用这些坑爹的玩意了,手动测试,或者寻找外部测试工具吧。

 

(3)c++ 单元测试工具,开源的一大堆。就使用google test吧,代码、使用方法都还比较简单,就是它了!

 

PS: 经过此事,我们内部达成的一直意见时:下个项目,就上python!因为可以不写单元测试。。。

 

 

 

 

posted @ 2012-12-01 15:01    阅读(302)  评论(0编辑  收藏  举报