减少函数内部依赖,简化测试用例设计
上一篇 /
下一篇 2012-07-05 14:47:55
/ 个人分类:单元测试
单元测试时,对于一些外部依赖,可以采用mock的方式进行处理,比如server,数据库等。但是如果一个函数内部对mock的依赖较多,会导致测试变得复杂,单元测试case初始化代码多。这样的设计其实是不合理的,应该对其进行简化。如下面的例子:
这个例子计算测试人员发现bug数的得分,如果是追踪列表里的bug,按照严重级别每个加0.5分,如果是生产环境的bug,则每个加1.0分。 class Bug { public: virtual float
GetBugScore(){ float score = 0.0; for ( bug in trace_buglist
){ if(bug in trace_online_buglist){ score += 1.0 *
bug.level; }else { score +=
0.5*bug.level; } } return score } //…省略其它代码 } |
针对以上代码设计测试:
TEST(testGetBugScore,
BoundaryTesting){ Bug bug; //省略构造依赖环境trace_buglist //省略构造依赖环境trace_online_buglist //上述两个list间的数据构造,数据依赖较麻烦 EXPECT_TRUE( 1.4
== bug.GetBugScore() ); } |
将源代码的函数精简后,拆分成多个子函数(分值计算函数及bug得分权重计算函数):
virtual floatGetBugScore(){ float score = 0.0; for(bug intrace_buglist){ score +=GetBugWeight(bug); } return score } virtual floatGetBugWeight(bug){ if(bug intrace_online_buglist){ return 1.0 *
bug.level; }else{ return 0.5 *
bug.level; } } 对应的测试代码如下: TEST(testGetBugScore, BoundaryTesting){
//省略trace_buglist的初始化 mockBug bug;// mockBug为使用google mock产生的mock类,其继承自Bug EXPECT_CALL(bug,GetBugWeight(testing::_))
.WillByDefault(testing::Return(1.4)); EXPECT_TRUE (1.4 == bug.GetBugScore
()); } |
|
收藏
举报
TAG: