【问题标题】:How to mock delegates in moq如何在最小起订量中模拟代表
【发布时间】:2014-03-26 09:23:25
【问题描述】:

我有一个如下的类实现。 MethodUnderTest() 是调用委托以使用一些自定义过滤器更新网格的方法,带有回调函数 - UpdateGridCallback。

public class MyClass
{
    public delegate void UpdateGridDelegate(MyCustomFilters filter);
    public UpdateGridDelegate del;
    public MyCustomFilters filter;

    public void MethodUnderTest()
    {
        //.... some code...
        // For simplicity of example I am passing somename.. should be passing rows..

        // set status bar saying retriving data..

       del = new UpdateGridDelegate(UpdateGrid);
       del.BeginInvoke(filter, UpdateGridCallback, null);
    }

    public void UpdateGrid(MyCustomFilters filter)
    {
       // Upadte Grid with passed rows.
    }

    public void UpdateGridCallback(IAsyncResult result)
    {
       // callback .. do some action here.. like updating status bar saying - Ready
    }
}

我正在使用 Nunit 和 Moq.delegate。 MethodUnderTest() 是被测方法。如何模拟 MethodUnderTest() 中使用的委托?

我想确保从我的 NUnit 测试用例中调用了委托(或执行了回调)。

【问题讨论】:

    标签: unit-testing delegates nunit moq


    【解决方案1】:

    只要你在MethodUnderTest 里面new 它就不能模拟它。 You can only mock what you could also have written by hand,但在这种情况下,从外面无法到达del

    您需要更改设计以将其从外部传入。由于del 已经是一个类字段,通过构造函数注入来传递它似乎是最自然的:

    public class MyClass
    {
        public delegate void UpdateGridDelegate(MyCustomFilters filter);
        public UpdateGridDelegate del;
        public MyCustomFilters filter;
    
        public MyClass(UpdateGridDelegate del)
        {
            this.del = del;
        }
    
        // etc.
    }
    

    现在你可以模拟它了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      相关资源
      最近更新 更多