You need to use Dependency Injection. There are many ways to do that, I'll present the easiest one:
class Base
{
public:
virtual int foo()
{
}
};
class BaseMock: public Base {
MOCK_METHOD(int, foo, (), (override));
};
class A {
A(Base* providedBase = new Base) {
pointer = providedBase;
}
double dosomething()
{
//more code
pointer->foo();
}
private:
Base* pointer;
};
Now, in your unit test you can provide BaseMock
in place of Base
:
TEST(A_Test, dosomethingWorksCorrectly)
{
BaseMock* mock = new BaseMock;
EXPECT_CALL(*mock, foo()).WillOnce(Return(13));
A uut(mock);
uut.dosomething();
}
Note: avoid using new
in modern C++. It's a headache to use it correctly and you almost never need it in C++14 and later.