我这个是纯属我自己的原因,官方有列举有些场景下不能打桩
打桩失败原因之一
我遇到的是 inline 函数打桩失败,因为官方说明有个 -fno-inline 的编译选项我没看到,导致打桩失败
打桩失败原因之二
部分编译器可能会做优化,比如下面这段代码
class Fruit {
public:
int GetFruit(const int fruit_num) {
return 0;
}
};
class Test {
public:
int GetFruit(const int fruit_num) {
return fruit.GetFruit(fruit_num);
}
class Fruit fruit;
};
如果我想调用 Test 类的 GetFruit,编译器可能会帮你直接写成 fruit.GetFruit(fruit_num),就把外面的函数壳扔掉了
写这个的目的是说,留意一下编译器可能做优化的场景,就是如果我对 Test 的 GetFruit 打桩,那么可能会失效,因为编译器做了优化,我们实际上是直接调用的 Fruit 的 GetFruit 函数,而我如果对 Fruit 的 GetFruit 函数打桩,打桩就不会失效
一个容易被忽略的地方 —— this 指针
Test 类的 GetFruit 函数,如下面代码,GetFruit 函数看似是一个参数,实际上是两个参数(有个 this)
如下面代码,打桩的时候,写的 GetFruit 的代替的函数 FakeGetFruit 时,如果 Fa
C++单元测试中inline函数打桩问题及解决方案,

最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



