给出以下非常简单的功能进行测试
class Actor {
public:
virtual void doo(int i) = 0;
};
class Sensor {
public:
virtual int goo() = 0;
};
void foo(int reps, Actor* actor, Sensor* sensor);
我想测试foo函数,该函数从传感器请求一个值,并使用该值调用actor。重复reps
次。
现在我要测试,foo
用正确的值(由传感器返回)调用actor
。
测试代码如下:
MockActor actor;
MockSensor sensor;
// InSequence s;
EXPECT_CALL(sensor, goo()).WillOnce(Return(3)).WillOnce(Return(1)).WillOnce(Return(3));
EXPECT_CALL(actor, doo(3)).Times(1).RetiresOnSaturation();
EXPECT_CALL(actor, doo(1)).Times(1).RetiresOnSaturation();
EXPECT_CALL(actor, doo(3)).Times(1).RetiresOnSaturation();
foo(3, &actor, &sensor);
但是现在不检查3,1,3的顺序。 如果我取消对InSequence的注释,即使顺序正确,我也总是会出错。我做错了什么?
PS。完整的代码可以在这里找到:https://github.com/lochbrunner/eval-gmock