newstud 发表于 2011-5-6 21:14:29

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:01

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();
}
页: [1]
查看完整版本: window下C语言函数替换实现动态打桩!【分享】