Gmock用于静态方法

时间:2016-03-08 04:34:57

标签: testing controller agent

我正在使用Gmock进行测试。我得到了一个所有方法都是静态的类。 例如

class A
{
  static int Method1(int x,int y){return (x+y)};
};

如何使用Gmock测试此类。 请帮帮我。 感谢

2 个答案:

答案 0 :(得分:0)

如果不修改代码,则无法执行此操作。但是您可以将应用程序与存根对象链接起来。只需创建另一个“A类”实现并将其与您的测试应用程序链接。

答案 1 :(得分:0)

你可以通过创建独立模拟类来实现,它不会从你需要模拟的类中派生出来。以下是您将如何做到这一点。

步骤-1:注释具有静态功能的类

// Comment the class
/*
    class A 
    {
      static int Method1(int x,int y){return (x+y)};
    };
*/

步骤2:创建一个与A同名的Mock类,并模拟其中的Method1。请注意,它不是源自原始类

class A  {
public:
    MOCK_METHOD2(Method1, int(int x, int y));
};

让我们假设使用静态函数的类需要模拟它UsingA。以下是它的编写方式。

class UsingA {
    A  &a1;
public:
    UsingA(A & _a1) : a1(_a1) {} 
    int CallFn() {
        // Original function that needs to be commented
        // return a1::Method1(10,25);
        return a1.Method1(10, 20);
    }
};

然后,您将如何编写测试

TEST(MyMockTest, Method1Test) {
    A mstat;
    UsingA ua(mstat);

    EXPECT_CALL(mstat, Method1(_,_))
    .Times(1)
    .WillOnce(Return(100));

    int retVal = ua.CallFn();

    EXPECT_EQ(retVal,100); 

}

可能不是最好的方式,但服务器的目的。希望它有所帮助