如何在C ++中更改静态方法的行为?

时间:2019-05-27 06:37:09

标签: c++ unit-testing mocking

有没有办法修改静态方法的行为以返回不同的参数?

我正在使用Gmock进行模拟,但是在这种情况下,我无法更改代码,并且方法必须保持静态

例如

class MyClass
{
public:
    static int GetSomething()
    {
        return -1; 
    }
};

我需要返回正数的方法

2 个答案:

答案 0 :(得分:2)

在这种情况下,您的选择是有限的,但是如果仅用于模拟,则只需使该方法返回静态变量而不是硬编码值即可。

class MyClass
{
  static int somethingValue;
public:
  static int GetSomething()
  {
    return somethingValue; 
  }
  static void SetSomething(int value)
  {
    somethingValue = value; 
  }
};
int MyClass::somethingValue = -1;

答案 1 :(得分:0)

免责声明-我在Typemock的单元测试公司工作。 您可以使用我们的API轻松更改方法的行为,例如:

WHEN_CALLED(MyClass::GetSomething()).Return(15);

这样,在您的所有测试中,GetSomehting将返回15。 它将同样适用于非静态方法。