coolxv/cpp-stub

对父类虚函数打桩失效

Closed this issue · 0 comments

#include<iostream>
#include "stub.h"
using namespace std;

class A{
    int i;
public:
    virtual int foo(int a){
        cout<<"I am A_foo"<<endl;
        return 0;
    }
};

class B : public A{
    int i;
public:
    virtual int foo(int a){
        cout<<"I am B_foo"<<endl;
        A::foo(a);
        return 0;
    }
};

int foo_stub(void* obj, int a)
{   
    cout<<"I am foo_stub"<<endl;
    return 0;
}

int main()
{
        typedef int (*fptr)(A*,int);
        fptr A_foo = (fptr)(&A::foo);
        Stub stub;
        stub.set(A_foo, foo_stub);
        B b;
        b.foo(1);
        return 0;
}

在上述代码中,子类B继承A,并且B::foo调用了A::foo,在打桩时想mock掉A::foo,但是失败了
预期返回结果为

I am B_foo
I am foo_stub

实际返回结果为

I am B_foo
I am A_foo