使用Google Mock实现模拟方法

时间:2015-11-19 18:00:18

标签: c++ unit-testing googletest googlemock gmock

我正在使用Google Mock嘲笑Arduino millis方法。此方法返回自设备启动以来的毫秒数。我想在每次方法调用时返回增加的数字(范围0到无穷大)。

到目前为止,我正在嘲笑这个函数:

EXPECT_CALL(*arduino, millis())
  .WillOnce(Return(0))
  .WillOnce(Return(1))
  .WillOnce(Return(2))
  // and so on...

但这是不切实际的。是否有一种更好的方式适用于无数次呼叫?

1 个答案:

答案 0 :(得分:3)

您可以编写一个自定义操作,该操作将返回递增的数字并在WillRepeatedly中使用它:

ACTION(ReturnIncreasingIntegers) {
    static int n = 0;
    return ++n;
}

EXPECT_CALL(*arduino, millis())
    .WillRepeatedly(ReturnIncreasingIntegers());

但我会建议反对。测试的确定性越低,就越难理解那里的测试代码的行为。