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.