c++ - 当预期结果取决于内部随机值时如何测试(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
取决于运行时生成的随机数。
解决方案
答案是模拟随机函数。你可以使用:
class Rnd
{
public:
MOCK_METHOD0(value,int());
};
Rnd mockedrandom;
#define rand() mockedrandom.value()
然后做EXPECT_CALL(mockedrandom,value()).WillOnce(Return(42)).WillOnce(Return(666))
在调用您的代码之前。
您需要在某处的被测代码编译中压缩定义。
推荐阅读
- python - Path.glob 带来
, 不是真实的文件路径 - amazon-web-services - aws codecommit - 有没有办法获取文件夹下的所有文件,包括其子文件夹
- java - 配置 jacocoTestReport 以读取多个 .exec 文件作为输入
- python - 如何在 Django 中使用 Lightbox 显示图像
- sql - Oracle Sql - 如何从输出的查询结果中获取数据大小?
- css - Font Awesome 5 图标未在 Chrome 上的 :before 元素中呈现
- javascript - Whats the best way to check for the existence of a document which contains a field with a specific value - Firestore?
- javascript - JavaScript 箭头函数是如何工作的?
- json - 如何缩短类中变量的声明?
- mysql - Mysql group by 与 group by 相反