谷歌测试和静态局部变量

Din*_*ino 2 c++ static unit-testing static-members googletest

我有一个包含 a 的方法static unsigned int,因此它可以返回连续的目录名称。就像是:

string MyClass::createDirectory() const
{
    static unsigned int i = 0;
    stringstream ss;
    string directory;
    do
    {
        ++i;
        ss.str("");
        ss << "/" << setfill('0') << setw(6) << i;
        directory = m_rootDirectory + ss.str();

    } while(!m_filesystem->createDirectory((directory)));

    return directory;
}
Run Code Online (Sandbox Code Playgroud)

我知道这是非常幼稚的解决方案,但现在已经足够了。

但是我在编写单元测试时遇到了问题——静态变量在测试用例之间递增。

有没有办法重置这样的变量?还是将静态方法变量更改为非静态类成员是我唯一的选择?

我正在使用 Google 测试框架。

Ant*_*rez 5

您无法将静态局部变量重置为声明它的函数的范围之外。

我会尝试在MyClass::createDirectory没有静态本地的情况下实现您的函数,即使它需要重新定义函数的签名甚至整个类的接口。

  • @gandgandi 是的,我知道。这个实现很快就会改变,但我想进行测试。 (2认同)