Parasoft 桩函数的理解和优先级
在软件测试的单元测试过程中,常常需要给某个函数打桩,即为该函数生成一个桩函数。
桩函数一般是用来代替被测函数中调用的其它函数的。比如:
function A(...){
...
a=func_B();
...
}
int func_B(){
return 0;
}
A表示待测函数,在A中某一处调用了其它函数func_B()。在func_B中的一些语句或操作可能会影响到函数A 的测试结果,我们可以通过打桩使func_B函数执行我们想要的操作或返回我们需要的值。假如,我想要func_B函数返回一个2。则其桩函数可以写成:
int func_B_stubs(){
return 2;
}
其中,func_B_stubs表示func_B的桩函数。在实际情况中,我们可以将func_B的桩函数的函数体写成任何我们想要的内容。
在Parasoft C++ Test中自定义桩函数:
打开Stubs视图,找到需要生成桩函数的函数,右键点击,选择Create User stubs,会弹出一个框让我们选择或填写生成桩函数的文件。生成之后,就可以编写桩函数的函数体了。【关于Parasoft生成桩函数的具体操作:打开Help–>Help Content输入关键词stubs即可查看桩函数相关的所有内容】
桩函数的类型和优先级:
一般桩函数分为四类:用户定义桩函数【User-defined stubs
】;系统安全桩函数【Safe stubs
】;原始桩函数【Original stubs
】;
自动生成桩函数【Auto generated stubs
】
- 用户定义桩函数:表示用户自定义的桩函数;
- 系统安全桩函数:安全桩函数是为了代替原来的一些危险函数而自动生成的。所谓的危险函数比如:fopen()和exit()函数等。如果不想使用这类桩函数,可以在测试配置中去掉,具体操作看我主页另外一篇博客。
- 原始桩函数:即原函数,比如A()和func_B()都是原函数。
- 自动生成桩函数:即自动生成的桩函数。
优先级:User-defined stubs>Safe stubs>Original stubs>Auto generated stubs。
这些桩函数的优先级表示:在执行相应的测试用例时,会优先调用。比如测试函数A时,其中执行func_B函数调用时,由于为func_B定义了用户定义的桩函数,测试执行时会调用其桩函数func_B_stubs而不是func_B。
由于桩函数的调用是经常导致测试用例运行失败的关键点,所以在测试用例执行失败的情况下,要注意检查桩函数的生成和调用。