首页 > 解决方案 > 当预期结果取决于内部随机值时如何测试(gmock)?

问题描述

我有以下代码:

std::string a()
{
    srand(time(0));
    return "file" + std::to_string(rand() % 10);   
}

int b()
{
   std::string filename = a();

   std::ifstream file(filename);
   std::string line;
   while (file >> line)
   {
       if (line == "something") return 1;
   }
   return 0;
}

我想用 gmock 来测试功能b。我的本地文件夹中有 10 个名为“file1”、“file2”...“file10”的文件(每个都包含“某物”或不包含)-其中一个将被选中用于阅读...

我怎样才能创建这样的测试?的返回值b取决于运行时生成的随机数。

标签: c++gmock

解决方案


答案是模拟随机函数。你可以使用:

class Rnd
{
public:
    MOCK_METHOD0(value,int());
};

Rnd mockedrandom;

#define rand()  mockedrandom.value()

然后做EXPECT_CALL(mockedrandom,value()).WillOnce(Return(42)).WillOnce(Return(666))

在调用您的代码之前。

您需要在某处的被测代码编译中压缩定义。


推荐阅读