51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4841|回复: 1
打印 上一主题 下一主题

[资料] window下C语言函数替换实现动态打桩!【分享】

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-5-6 21:14:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在单元测试中经常需要动态的替换被测函数调用的其他函数,这个替换叫做打桩,现在很少有动态打桩的函数,研究了许久,写了这个功能,做成了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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 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 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 06:20 , Processed in 0.066103 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表