【发布时间】:2011-08-22 22:05:59
【问题描述】:
使用 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
更新答案
感谢Patrick在下面的回答,实现上述的正确代码是:
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# unit-testing mocking rhino-mocks