gpt4 book ai didi

c++ - 在 gmock 的 EXPECT_CALL 中调用 sleep()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:13 32 4
gpt4 key购买 nike

我试图在调用 FuncHelper 之前在 .WillOnce 中做一些 sleep 。所以我需要类似于以下内容的内容:

EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
.WillOnce(DoAll(InvokeWithoutArgs(sleep(TimeToSleep)),
Invoke(_mock, &M_MyMock::FuncHelper)));

是否可以在 .DoAll 中使用 arg 调用 sleep()? C++98 是首选。

更新:

该解决方案基于@Smeeheey 的回答并使用 C++98。

template <int N> void Sleep ()
{
sleep(N);
}
...
EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
.WillOnce(DoAll(InvokeWithoutArgs(Sleep<TimeToSleep>),
Invoke(_mock, &M_MyMock::FuncHelper)));

最佳答案

既然你说 C++98 是可取的而不是强制性的,那么首先我会给出一个简洁的 C++11 答案:

EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
.WillOnce(DoAll(InvokeWithoutArgs([TimeToSleep](){sleep(TimeToSleep);}),
Invoke(_mock, &M_MyMock::FuncHelper)));

否则(对于 C++98),在代码的其他地方定义一个包装函数:

void sleepForTime()
{
sleep(TimeToSleep);
}

然后:

EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
.WillOnce(DoAll(InvokeWithoutArgs(sleepForTime),
Invoke(_mock, &M_MyMock::FuncHelper)));

请注意,TimeToSleep 必须是一个全局变量。

编辑:根据评论中 OP 的建议,如果 TimeToSleep 是编译时常量,您可以避免使用全局变量:

template <int Duration>
void sleepForTime()
{
sleep(Duration);
}

...

EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
.WillOnce(DoAll(InvokeWithoutArgs(sleepForTime<TimeToSleep>),
Invoke(_mock, &M_MyMock::FuncHelper)));

关于c++ - 在 gmock 的 EXPECT_CALL 中调用 sleep(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37678844/

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