我有一个MockBuilder.cs文件,其中包含以下代码:
readonly IConnection _connection = MockRepository.GenerateStub<IConnection>();
...
_connection.Stub(x => x.CreateModel()).WhenCalled(i =>
{
var channel = _channelPool.Pop();
i.ReturnValue = channel;
_channels.Add(channel);
channel.Stub(x => x.CreateBasicProperties()).Return(_basicProperties);
channel.Stub(x => x.IsOpen).Return(true);
channel.Stub(x => x.BasicConsume(null, false, null, null))
.IgnoreArguments()
.WhenCalled(consumeInvokation =>
{
var consumerTag = (string)consumeInvokation.Arguments[2];
var consumer = (IBasicConsumer)consumeInvokation.Arguments[3];
consumer.HandleBasicConsumeOk(consumerTag);
_consumers.Add(consumer);
}).Return("");
});
对于Rhino Mocks来说,这非常合适,因为“。WhenCalled”在CreateModel()方法上设置了一个拦截器,当调用它时,上面的lambda代码就会运行,在完成之后,拦截器会指示目标继续进行。
我正在尝试用Moq做同样的事情,但Callback方法并不适合我...或者我做错了!!!
我尝试了以下内容:
_connection.Setup(x => x.CreateModel()).Callback(() => { /* code in here */ });
但是当调用CreateModel()时,它什么也没做......我希望它在这里* / bit中触发/ *代码。
如果我做了以下事情,它才会起作用:
_connection.Setup(x => x.CreateModel()).Callback(() => { /* code in here */ });
_connection.Object.CreateModel();
提前感谢您的帮助!肯定会非常感激: - )