为什么 C 不支持 TDD。它不能模拟功能吗?



target:mock(main.c(,未修改任何原始文件(work.a(

objcopy-work.a--添加符号_real_test1=.text:000000000000 126ed,weak--弱化工作.a

00000000000 126ed是通过命令测试1地址(nm工作.a(

重写函数并在没有原始文件的情况下调用main.c中的实际函数

它可以工作

#工作。

void test1(){
printf("old");
}
void test2(){
test1();
}

#main.c

int real_flag=0;
void test1(){
if(real_flag){
_real_test1();
}else{
printf("new");
}
}
int main(){
test2();//print new
real_flag=1;
test2();//print old
}

问题:如何使多个real_function

例如:测试1,__real_test1测试2,__real_test2…

或模拟功能的其他方法

尝试失败

尝试失败:因为它需要修改原始文件工作。

void _real_test1() __attribute__((alias("test1")));

尝试失败:因为它只是修改函数名称,而不是模拟函数

objcopy --redefine-syms

尝试失败:因为它只在main.c中工作,所以它仍然在工作中调用旧的test1。a

gcc -Wl,--wrap=test1

创建mock函数覆盖test1函数

  1. 命令objcopy使静态库的功能减弱
  2. 覆盖测试程序中的test1函数

通过共享库加载实函数

  1. 创建共享库libfunc.so
  2. dlsym通过函数指针从libfunc.so加载test1您可以调用test1和__real_test1

最新更新