gpt4 book ai didi

c++ - 谷歌模拟 : perform repeatedly actions in a specified order

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:18 25 4
gpt4 key购买 nike

有人知道如何编写一个 google mock 方法来重复执行一系列操作(一次一个),而我们事先不知道对该方法的调用次数吗?

something like :
EXPECT_CALL(mock, foo())
.WillRepeatedly(.WillOnce(Return(2));
.WillOnce(Return(40));
.WillOnce(Return(7)));

行为:

mock.foo(); // return 2
mock.foo(); // return 40
mock.foo(); // return 7

mock.foo(); // return 2
mock.foo(); // return 40
mock.foo(); // return 7

mock.foo(); // return 2
...

谢谢

最佳答案

我已经在评论中提到,在您无法完全控制或了解那里真正发生的事情的地方编写单元测试并不是一个好主意。

但无论如何这是可行的 - 例如您可以调用 lambda,每次调用时都会产生下一个结果:

auto valueGenerator = [idx=0, arr={2,40,7}] () mutable
{
auto result = *std::next(std::begin(arr), idx);
idx = (idx + 1) % arr.size();
return result ;
};
EXPECT_CALL(....).WillRepeatedly(Invoke(valueGenerator));

如果你需要检查这不是在序列的中间结束 - 这样做:

int idx = 0;
auto valueGenerator = [&idx, arr={2,40,7}] ()
{
auto result = *std::next(std::begin(arr), idx);
idx = (idx + 1) % arr.size();
return result ;
};
EXPECT_CALL(....).WillRepeatedly(Invoke(valueGenerator));

/// Prossible in TearDown - or at the very end of test:
ASSERT_EQ(0, idx);

关于c++ - 谷歌模拟 : perform repeatedly actions in a specified order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42727455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com