如何模拟使用成员变量初始化的局部变量
How to mock a local variable initialized with the member variable
我有两个 类 Class A 和 Class SRD(示例 类 用于理解问题。真正的 类 是不同的)。 类 都具有相同的 Function(method1) 和相同的参数。两者都不是来自不同的 Classes。
Class SRD 是Class A 的成员。Class A 中的一个函数为SRD 创建一个新对象并调用method1()
。它应该调用模拟函数。但它调用实际实现
我已经为 类 编写了 mock 类 并在 类 中定义了 mock 方法并在 TEST 函数中编写了 EXPECT_CALL
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()
时,它应该调用 mock 方法。我该怎么做?
我不想更改生产代码。
感谢您花时间回答问题。 @Chris Oslen & @sklott
我忘了将基础 class 方法设为 Virtual。当我更改基础 class 方法
时它工作正常
我有两个 类 Class A 和 Class SRD(示例 类 用于理解问题。真正的 类 是不同的)。 类 都具有相同的 Function(method1) 和相同的参数。两者都不是来自不同的 Classes。
Class SRD 是Class A 的成员。Class A 中的一个函数为SRD 创建一个新对象并调用method1()
。它应该调用模拟函数。但它调用实际实现
我已经为 类 编写了 mock 类 并在 类 中定义了 mock 方法并在 TEST 函数中编写了 EXPECT_CALL
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()
时,它应该调用 mock 方法。我该怎么做?
我不想更改生产代码。
感谢您花时间回答问题。 @Chris Oslen & @sklott
我忘了将基础 class 方法设为 Virtual。当我更改基础 class 方法
时它工作正常