51Testing软件测试论坛

标题: window下C语言函数替换实现动态打桩!【分享】 [打印本页]

作者: newstud    时间: 2011-5-6 21:14
标题: window下C语言函数替换实现动态打桩!【分享】
在单元测试中经常需要动态的替换被测函数调用的其他函数,这个替换叫做打桩,现在很少有动态打桩的函数,研究了许久,写了这个功能,做成了lib库,在cygwin下生成的。
给出了一个Demo,使用makefile试一试吧!
ps:我目前只在windowsxp下应用,其他平台未知!欢迎发邮件给我。
#include "stdio.h"
#include "d_stub.h"

void testfunc(int arg, int a, int b, int c)
{
printf("\tI am testFunc %d\n", arg);
}

void testfunc1(int arg, int a, int b, int c)
{
printf("\t******************\n\tI am stub function\n");
printf("\tArguments: %d %d %d %d\n\t******************\n", arg, a, b, c);
}

void testfunc2(int arg, int a, int b, int c)
{
printf("\tHello world\n");
}

main()
{
stubInfo si, ss;
printf("call original func:\n");
testfunc(1, 2, 3, 4);
setStub(testfunc, testfunc1, &si);
setStub(testfunc1, testfunc2, &ss);
printf("after set stub for func1 and func2:\n");
testfunc(1, 2, 3, 4);
cleanStub(&ss); /*recover testfunc1*/
printf("after clear stub for func2:\n");
testfunc(1, 2, 3, 4);
cleanStub(&si); /*recover testfunc*/
printf("after clear stub for func1::\n");
testfunc(1, 2, 3, 4);
}

下载地址:http://download.csdn.net/source/2978081
作者: newstud    时间: 2011-5-6 21:17
source.c
void doSomething()
{
  void *ptr = null;
  FILE *fp = null;
  ptr = (void *)malloc(128);
  if(ptr == null)
  {
  ......
  }
  else
  {
  fp = fopen("a.txt","r+");
  if(fp == null)
  ......
  }
}
test.c
void testCase1() /* 覆盖内存申请成功,但fopen文件失败的分支 */
{
  ...
}
void testCase2() /* 覆盖内存申请成功,但fopen文件成功的分支 */
{
  ...
}
void testCase3() /* 覆盖内存申请失败的分支 */
{
  ...
}
int main()
{
  testCase1();
  testCase2();
  testCase3();
}




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2