Rhino Mocks IgnoreArguments()并测试是否正确调用了lambda

Mar*_*k W 5 c# unit-testing rhino-mocks

这就是我所拥有的:

   public interface IDataCenterMsmqWriter
   {
      void UpdateData(Action<DataCenterWcfProxy> action);
   }
Run Code Online (Sandbox Code Playgroud)

被测系统:

public class WcfService : IWcfService
{
    private readonly IDataCenterMsmqWriter _writer;

    public WcfService(IDataCenterMsmqWriter writer)
    {
        _writer = writer;
    }

    #region IWcfService members

    public void SendData(SomeData data)
    {
        _writer.UpdateData(d => d.SendVarData(data));
    }

    // other members of IWcfService elided
    #endregion
}
Run Code Online (Sandbox Code Playgroud)

如何使用Rhino Mocks进行测试,将_writer设置为Mock,并希望测试在UpdateData方法中调用了正确的Action.

我试过这个:

// _writer is setup as a mock
var data = new SomeData();
_wcfServiceSUT.SendData(data);
_writer.AssertWasCalled(d => d.UpdateData(x => x.SendVarData(data));
Run Code Online (Sandbox Code Playgroud)

不起作用.

我可以添加:

,在AssertWasCalled中的UpdateData之后的p => p.I.IgnoreArguments(),但是这并没有给出我想要的东西,以确保使用数据变量调用SendVarData.

我看过这个:

如何断言一个动作被调用

但我的动作并没有像他的例子中的mockDialogService那样被嘲笑.

有没有办法测试是否使用正确的输入参数正确调用了Action或Func等?

小智 1

UpdateData应该是虚拟的,否则rhino模拟无法覆盖方法