在循环中添加预期的调用
Adding expected calls in a loop
这就是我想要实现的。在我的测试夹具中,我想用参数n
调用一个辅助函数,告诉测试夹具应该有多少初始化序列。序列中使用的一些参数存储在三个std::vector
容器中;fileDescriptor, handle, selectionObject
。
我写的是:
void MyTest::init_Ok(uint32_t n)
{
for (uint32_t i = 0; i < n; ++i)
{
fileDescriptor.push_back(i); // FDs starting at 0
handle.push_back(reinterpret_cast<void*>(18 + i)); // handles starting at 18
selectionObject.push_back(555 + i); // SOs starting at 555
EXPECT_CALL(MyMockApi::getApi(), initialize(Pointee(nullptr), StrEq("InitString"), MyMatcher()))
.WillOnce(DoAll(SetArgPointee<0>(handle[i]),
Return(INIT_OK)));
EXPECT_CALL(MyMockApi::getApi(), selectionObjectGet(handle[i], Pointee(nullptr)))
.WillOnce(DoAll(SetArgPointee<1>(selectionObject[i]),
Return(SELECTION_OK)));
EXPECT_CALL(MyMockApi::getApi(), finalize(handle[i]))
.WillOnce(Return(FINAL_OK));
}
}
我知道为什么它不起作用。预计对initialize
的所有调用都是相同的,但我想对第一、第二、第三、…执行不同的操作(参数取决于循环计数器i
(。。。,第n次调用。无论参数n
如何,当前实现都只期望对initialize
进行一次调用。有没有可能解决这个问题并以某种方式保持循环,或者我必须为每个i
添加一行WillOnce
的操作?这意味着我必须检查n
,并为n
的不同可能值添加不同数量的WillOnce
行,这是我真正想要避免的。
一种方法可以是使用Invoke
。您可以编写一个可以访问handles容器的函数,以及一个正在运行的成员/静态变量(比如counterVar(,该变量将指示函数被命中的次数。根据counterVar的值,您可以决定逻辑。
.WillRepeatedly(Invoke(<your function>))
类似于:
EXPECT_CALL(MyMockApi::getApi(), initialize(Pointee(nullptr), StrEq("InitString"), MyMatcher()))
.WillRepeatedly(Invoke(successfulInitialize));
ReturnCode successfulInitialize(void* op, std::string msg)
{
static int counterVar = 0;
*op = handles[counterVar++];
return INIT_OK;
}
相关文章:
- 如何防止clang格式在流运算符调用之间添加换行符<<
- MFC 中的窗口消息管理:添加基类调用是否是强制性的?
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 如何调用继承的重载运算符<<并在派生类的输出中添加更多文本?
- 添加字符串类型的类成员会导致调用基类函数而不是子函数
- 如何调用运算符函数添加两个对象?
- lambda表达式在while()中调用,为什么我们需要在lambda表达后添加()
- 为什么当我添加一个不同的对象(复制构造函数中的参数)时调用复制构造函数?
- 如何将按钮添加到节点的属性编辑器面板,该面板调用该节点内的方法?
- 强制实施调用函数应向被调用函数返回的值添加常量的规则
- 为什么在此 CRTP 基函数调用中添加引用会消除错误?
- 将整数添加到数组值而无需调用它的最安全方法
- 如何将带有 sh 文件的文件夹添加到 cmake 以通过 system() 调用该文件
- 在调用C函数的非抛出内联函数上添加noexcept
- 当先前调用Remove_All_Sinks()时,提升日志设置旋转和最大文件大小导致添加第二个接收器
- C++:每当将元素添加到集合中时,如何调用函数
- 删除 max 并添加新元素 c++ std::make_heap 时进行单个'Heapify'调用
- 为函数调用添加作用域
- 如何在c++中向流式grpc调用添加元数据
- 在xlc c++编译器中,给构造函数调用添加圆括号会导致参数重复错误