У меня есть два класса Class A и Class SRD (Примеры классов для понимания проблемы. Реальные классы разные).Оба класса имеют одну и ту же функцию (method1) с одинаковыми аргументами.Оба не являются производными от разных классов.
Класс SRD является членом класса А. Функция в классе А создает новый объект для SRD и вызывает method1()
.Это должно вызвать фиктивную функцию.но он вызывает фактическую реализацию
У меня есть написанные фиктивные классы для обоих классов, и я определил метод имитации в обоих классах и написал EXPECT_CALL
в функции TEST
class A{
private:
SRD* srd;
public :
bool Method1();
bool MethodX();
SRD* getsrd() {return srd;}
};
bool A :: MethodX()
{
srd.Method1(); // Not Calling Mock Method - Calling Actual
//Implementation
}
bool A::Method1()
{
....
}
class SRD{
public:
bool Method1();
};
class MockSRD : public SRD{
MOCK_METHOD0(Method1, bool())
};
class MockA : public MockA{
MOCK_METHOD0(Method1, bool())
};
bool SRD::Method1()
{
....
}
class TestA : public A {};
TEST_F(TestA, test1)
{
MockSRD srd;
EXPECT_CALL(srd, Method1())
.Times(testing::AnyNumber())
.WillRepeatedly(Return(true));
srd.Method1() //Working fine - Caling mock Method;
MethodX()
}
Когда я вызываюs1.Method1()
, стоит вызвать метод макета.как мне это сделать?
Я не хочу менять производственный код.