googlemock如何在测试中使用模拟

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

我是google模拟的初学者,我不确定如何使用它和这个概念。

如果我正在尝试从一个类中测试一个方法,而该类正在从不同的类中调用其他方法。我是否需要从Test方法调用的不同类中模拟所有这些方法。这是一个例子:


class A {
public:
    A () {}
    int setnum(int num) {//do some stuff return 1 or 0//
    }


private:
    int _num;          
};


class B {

  public:
    B (){}
    int init(A *a, int number){ 
     if(a->setnum(number))
        return 1;
     return 0;
     }
    void setNum(int num){_num=num;}

  private:
    A *_a;
    int _num;            
};



class C {
  public:
    int doSoemthing(A *a, int number){ 

    if (domore(a,number))
         return 1;
    return 0;
    }

    int domore(A *a, int number){
        if(_b.init(a,number))
            return 1;
        return 0;

        ;}

  private: 
    B _b;        
};

我需要模拟需要测试我的Test方法的类A和B中的所有方法吗?或者我可以只模拟一个Class,并测试该类是否正常工作。

c++ unit-testing googletest gmock
1个回答
0
投票

我不确定100%,但是在您的示例中,您根本不需要使用模拟。您可以在这里非常轻松地创建对象。

[当我期望将调用某些方法并应返回特定值时,我将使用模拟方法-我不是在测试此方法,但例如if-statement:

 A a;
 if(a.method())
 { 
      // some logic 
 }
  • 要操纵将获得的结果,我将使用类似以下的模拟:EXPECT_CALL(aMock.method()).WillOnce(Return(true));但是您可以在更多情况下使用它(例如:您可以避免创建非常大的类,并用模拟对象替换它)。
© www.soinside.com 2019 - 2024. All rights reserved.