使用gmock模拟创建另一个类的实例和另一个类的实例

问题描述 投票:0回答:1

假设我有这样的课程:

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);   

}
c++ googletest gmock
1个回答
0
投票

如果想保持代码结构不变,有两种简单的方法。

  1. 您可以让测试类成为该类的朋友,然后让测试类将b类成员变量重置为模拟对象

  2. 您可以在测试中创建此类的子类。然后让子类将父类b成员变量设置为模拟]

© www.soinside.com 2019 - 2024. All rights reserved.