c# - 我可以在 Rhino Mocked 对象上定义方法的实现吗?

标签 c# unit-testing mocking rhino-mocks

使用 Rhino.Mocks,一旦我模拟了一个界面,我就可以:

  • 为模拟对象上的非 void 方法设置“返回”值
  • 检查某些方法的调用方式和值

但是,是否可以有选择地为模拟对象上的方法定义一个实现?

理想情况下我想这样做(RhinoImplement 是我希望存在的 Rhino 扩展!):

var messages = new List<IMessage>();

IBus bus = MockRepository.GenerateMock<IBus>();

bus.RhinoImplement(b => b.Send(Arg<IMessage>.Is.Anything), imess => messages.Add(imess));

//now run your test on the Class that uses IBus

//now, I can inspect my local (List<IMessage>)messages collection

用答案更新

感谢帕特里克在下面的回答,实现上述目标的正确代码是:

var messages = new List<IMessage>();

IBus bus = MockRepository.GenerateMock<IBus>();

bus
    .Expect(b => b.Send(Arg<IMessage>.Is.Anything))
    .WhenCalled(invocation => messages.Add((IMessage)invocation.Arguments[0]))
    .Repeat.Any() //the repeat part is because that method might be called multiple times

//now run your test on the Class that uses IBus

//now, I can inspect my local (List<IMessage>)messages collection

最佳答案

关于c# - 我可以在 Rhino Mocked 对象上定义方法的实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5958108/

相关文章:

C# - 如何使用 DateTime.ToString 显示 Apr '11

java - Mockito - 在单元测试中期望模拟时返回 null

java - 如何使用 Google App Engine 插件从 WAR 中排除单元测试?

mocking - 如何在 Mockito 中否定 ArgumentMatcher?

c# - 将右侧 UITableViewCell 中的标签与自动布局对齐

c# - 启动画面示例

c# - Entity Framework - 在插入和自动递增之前检查条目是否存在

java - 如何使用 Mockito 模拟 Restriction.eq()

java - 如何模拟参数化构造函数?

.net - 模拟和验证对包含 Expression<Func<T,bool>> 参数的方法的调用