如果在 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 循环的所有迭代之间共享,并将在迭代之间保持其状态,我会仔细检查测试是否假设循环的每次迭代都得到一个新模拟对象。
我有这样的测试设置:
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 循环的所有迭代之间共享,并将在迭代之间保持其状态,我会仔细检查测试是否假设循环的每次迭代都得到一个新模拟对象。