使用 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
最佳答案
使用“WhenCalled”方法:
关于c# - 我可以在 Rhino Mocked 对象上定义方法的实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5958108/