假设我有这样的课程:
class A
{
public:
A(struct param1, struct params2, struct param3)
{
inst1 = Create_B(param1);
inst2 = Create_B(param2);
}
int some_method(std::string st1, std::string st2, double d1, int s1);
private:
virtual classB* Create_B(struct param)
{
return new classB(param);
}
protected:
classB *inst1;
classB *inst2;
};
我想测试A类并模拟出B类。我将如何去做呢?
我为A类创建了一个模拟:
class MockA : public A
{
public:
MockA(struct c1, struct c2, struct c3) : A(c1, c2, c3) {};
virtual ~A() {}
MOCK_METHOD1(Create_B, B*(struct));
};
但是我在设置测试时遇到了麻烦。我不确定如何设置EXPECT_CALL,当我调用some_method时,应该使用Class_B调用方法,无法弄清楚如何对此进行测试。
TEST_F(Test_Fixture, VerifyA)
{
/* Initialize */
MockA obj(param1, param2, param3);
}
如果想保持代码结构不变,有两种简单的方法。
您可以让测试类成为该类的朋友,然后让测试类将b类成员变量重置为模拟对象
您可以在测试中创建此类的子类。然后让子类将父类b成员变量设置为模拟]