嘲笑 IEnumerable

模擬從 IEnumerable 繼承的介面以返回固定資料是非常簡單的。假設以下類:

public class DataClass
{
    public int Id { get; set; }
}

public interface IEnumerableClass : IEnumerable<DataClass>
{
}

可以採用以下方法。首先,建立一個包含模擬需要返回的資訊的列表:

IList<DataClass> list = new List<DataClass>();
for (int i = 0; i < 10; i++)
{
    list.Add(new DataClass { Id = 20 + i });
}

然後建立 IEnumerable 類的模擬並設定其 GetEnumerator 方法以返回列表的列舉器:

var mock = new Mock<IEnumerableClass>();
mock.Setup(x => x.GetEnumerator()).Returns(list.GetEnumerator());

這可以驗證如下:

int expected = 20;
foreach (var i in mock.Object)
{
    Assert.AreEqual(expected++, i.Id);
}