嘲笑 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);
}