在Rhino mock中计数方法调用

本文关键字:方法 调用 Rhino mock | 更新日期: 2023-09-27 18:03:46

所以:我想用比Any(), Once()或AtLeastOnce()更具体的东西来计数Rhino mock中的方法调用。有什么机制可以做到这一点吗?

在Rhino mock中计数方法调用

诀窍是使用Repeat.Times(n),其中n是次数。

令人惊讶的是,下面的测试将通过,即使该方法被调用的次数比预期的要多:

[Test]
public void expect_repeat_n_times_does_not_work_when_actual_greater_than_expected() {
  const Int32 ActualTimesToCall = 6;
  const Int32 ExpectedTimesToCall = 4;
  var mock = MockRepository.GenerateMock<IExample>();
  mock.Expect(example => example.ExampleMethod()).Repeat.Times(ExpectedTimesToCall);
  for (var i = 0; i < ActualTimesToCall; i++) {
      mock.ExampleMethod();
  }
  // [?] This one passes
  mock.VerifyAllExpectations();
}
要解决这个问题,可以使用下面的方法:
[Test]
public void aaa_repeat_n_times_does_work_when_actual_greater_than_expected() {
  const Int32 ActualTimesToCall = 6;
  const Int32 ExpectedTimesToCall = 4;
  var mock = MockRepository.GenerateMock<IExample>();
  for (var i = 0; i < ActualTimesToCall; i++) {
      mock.ExampleMethod();
  }
  // This one fails (as expected)
  mock.AssertWasCalled(
      example => example.ExampleMethod(),
      options => options.Repeat.Times(ExpectedTimesToCall)
  );
}

来源:http://benbiddington.wordpress.com/2009/06/23/rhinomocks-repeat-times/

编辑:只编辑了开头的摘要,感谢有用的回复。