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



以下是我所拥有的:

   public interface IDataCenterMsmqWriter
   {
      void UpdateData(Action<DataCenterWcfProxy> action);
   }

被测系统:

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
}

如何使用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));

不起作用。

我可以添加:

,p=>p.在AssertWasCalled中的UpdateData之后忽略Arguments(),但这并不能满足我的要求,以确保使用数据变量调用SendVarData。

我看过这个:

如何断言一个动作被称为

但我的Action并不像他的例子中的mockDialogService那样被嘲笑。

有没有一种方法可以测试Action或Func是否使用正确的输入参数等正确调用?

UpdateData应该是虚拟的,否则rho-mock不能覆盖方法

验证使用正确参数调用Action或Func的最佳方法是使用.WWhenCalled扩展。示例如下谷歌小组讨论。

此示例显示了如何利用预期输出与实际输出,而不是是否满足预期

最新更新