减少函数内部依赖,简化测试用例设计

上一篇 / 下一篇  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:

 

评分:0

我来说两句

Open Toolbar