gpt4 book ai didi

c++ - 我如何反复期待一系列调用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:24 25 4
gpt4 key购买 nike

我正在编写一个测试来验证图像处理线程上的调用顺序。相关的测试代码如下所示:

Sequence s1, s2;
...
EXPECT_CALL(*mMockVideoSource, getFrame()).InSequence(s2).WillRepeatedly(Return(mFakeBuffer));
EXPECT_CALL(*mMockProcessor, processFrame(_,_)).InSequence(s2).WillRepeatedly(Return(0));
EXPECT_CALL(*mMockVideoSource, releaseFrame(_)).Times(AnyNumber()).InSequence(s2);
...

在这种情况下,调用顺序非常重要。 getFrame() , processFrame()releaseFrame()必须按此顺序调用。不幸的是,上面的代码并没有真正实现我想要的。上面的代码将允许 getFrame()在调用 processFrame() 之前重复调用, 并调用 getFrame()releaseFrame() 之后被认为是错误,因为它破坏了序列。

有没有办法期望重复进行特定顺序的调用?我不关心序列执行了多少次,只要按顺序调用函数即可:get、process、release、get、process、release...

最佳答案

您可以在调用模拟 (https://code.google.com/p/googlemock/wiki/CookBook#Combining_Actions) 和一些全局状态(如“lastAction”)时创建辅助操作。

副 Action 看起来像:

void checkSequenceCorrectness(ActionType currAction)
{
if (currAction == PROCESS_FRAME) EXPECT_EQ(GET_FRAME, lastAction);
(more ifs)
...

lastAction = currAction;
}

您可以通过以下方式将其绑定(bind)到模拟:

EXPECT_CALL(*mMockProcessor, processFrame(_,_))
.WillRepeatedly(DoAll
Return(0),
Invoke(checkSequenceCorrectness(PROCESS_FRAME)));

关于c++ - 我如何反复期待一系列调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23895985/

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