cpp-stub 打桩失败

C++单元测试中inline函数打桩问题及解决方案,

我这个是纯属我自己的原因,官方有列举有些场景下不能打桩

cpp-stub: C++ 单元测试打桩

打桩失败原因之一

我遇到的是 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值