使用 Google Mock 的 Mock 方法实现

Mock method implementation using Google Mock

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

到目前为止,我是这样模拟这个函数的:

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

但这不切实际。有没有更好的方法可以处理无限次调用?

您可以编写自定义操作 return 递增数字并在 WillRepeatedly:

中使用它
ACTION(ReturnIncreasingIntegers) {
    static int n = 0;
    return ++n;
}

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

但我不建议这样做。测试的确定性越低,就越难理解被测代码的行为。