The interface I want to mock
interface Proxy
{
Task Send();
}
Usage
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);
}
}
}
The Mock()
method would fail.
However, if I un-comment the ToList()
then the Mock()
method would success.
I want to know why this happens.
Moq version: 4.14.5