如果在 google 模拟上指定多个 WillRepeatedly 操作会发生什么?

What happens if multiple WillRepeatedly actions are specified on a google mock?

我有这样的测试设置:

for (...)
{
    std::unique_ptr<MockObject> mock = std::make_unique<MockObject>();
    const SomeObject* validObject = ...;
    EXPECT_CALL(*mock, method(_)).WillRepeatedly(Return(validObject));
}

这是否保证 return 当前 for 范围内的 validObject 对象? 如果是这样,如果模拟是在 for 之外声明的,它的行为是否相同?

对于此示例,for 循环的每次迭代都会生成一个新的 MockObject mock

EXPECT_CALL....WillRepeatedly 行将为该模拟对象 的方法 return 设置 return 值 为任何 validObject 指向的值。

would it behave the same if the mock was declared outside the for?

是的,至少这部分测试会。不同之处在于 mock 对象将在 for 循环的所有迭代之间共享,并将在迭代之间保持其状态,我会仔细检查测试是否假设循环的每次迭代都得到一个新模拟对象。