【问题标题】:Rhino Mocks IgnoreArguments() and testing if a lambda was called correctlyRhino 模拟 IgnoreArguments() 并测试是否正确调用了 lambda
【发布时间】:2012-02-24 17:21:08
【问题描述】:

这是我所拥有的:

   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.IgnoreArguments() 在 AssertWasCalled 中的 UpdateData 之后,但这并没有给我我想要的,以确保使用数据变量调用 SendVarData。

我看过这个:

How to assert that an action was called

但在他的示例中,我的 Action 并没有像 mockDialogService 那样被模拟。

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

【问题讨论】:

  • DataCenterWcfProxy.SendVarData() 是虚拟方法,还是可以放置一个接口?
  • 不,它只是接口上的一个公共方法,将通过 WCF 序列化。
  • 这是一个添加接口IDataCenterWcfProxy的选项,该接口由DataCenterWcfProxy实现并由UpdateUpdate方法使用IDataCenterMsmqWriter?

标签: c# unit-testing rhino-mocks


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    验证是否使用正确的参数调用了 Action 或 Func 的最佳方法是使用 .WhenCalled extension。可以在下面找到一个示例 Google groups discussion

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多