如果通过延迟执行初始化一组Mock对象,则Moq验证不起作用 我要模拟的界面用法

问题描述

我要模拟的界面

interface Proxy
{
    Task Send();
}

用法

class MultiProxy
{
    IEnumerable<Proxy> _proxies;
    MultiProxy(IEnumerable<Proxy> proxies)
    { _proxies = proxies; }

    async Task Send()
    {
        _proxies.Select(proxy => proxy.Send());
    }

    // The test method written here for convenience
    private async Task Mock()
    {
        var mocks = Enumerable.Range(0,2)
            .Select(_ =>
            {
                var mock = new Mock<Proxy>();
                mock.Setup(proxy => proxy.Send())
                    .Returns(Task.CompletedTask);
                return mock;
            });
        //.ToList();
        var mockProxies = mocks.Select(mock => mock.Object);
        var mulProxies = new MultiProxy(mockProxies);

        await mulProxies.Send();

        foreach (var mock in mocks)
        {
            mock.Verify(proxy => proxy.Send(),Times.Once);
        }
    }
}

Mock()方法将失败。
但是,如果我取消对ToList()的注释,那么Mock()方法将成功。

我想知道为什么会这样。

Moq版本:4.14.5

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)