使用moq模拟IEnumerable <T>

Sha*_*eKm 7 c# asp.net unit-testing moq

有了这个界面,我怎么能用moq模拟这个对象?

public interface IMyCollection : IEnumerable<IMyObject>
{
    int Count { get; }
    IMyObject this[int index] { get; }
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

无法将表达式IEnumerable转换为IMyCollection

Nko*_*osi 20

var itemMock = new Mock<IMyObject>();
var items = new List<IMyObject> { itemMock.Object }; //<--IEnumerable<IMyObject>

var mock = new Mock<IMyCollection>();
mock.Setup(m => m.Count).Returns(() => items.Count);
mock.Setup(m => m[It.IsAny<int>()]).Returns<int>(i => items.ElementAt(i));
mock.Setup(m => m.GetEnumerator()).Returns(() => items.GetEnumerator());
Run Code Online (Sandbox Code Playgroud)

模拟将使用具体List来包装并公开测试所需的行为.