С Rhino.Mocks, как только я макет интерфейса, я могу:
- Установить "возвращаемые" значения для не пустых методов на смоделированном объекте
- Проверьте, как и с какими значениями были вызваны определенные методы с
Однако, возможно ли выборочно определить реализацию для методов на макетируемых объектах?
В идеале я бы хотел это сделать (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