Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模拟IEnumerable<;T>;使用最小起订量_C#_Asp.net_Unit Testing_Moq - Fatal编程技术网

C# 模拟IEnumerable<;T>;使用最小起订量

C# 模拟IEnumerable<;T>;使用最小起订量,c#,asp.net,unit-testing,moq,C#,Asp.net,Unit Testing,Moq,有了这个接口,我如何使用moq模拟这个对象 public interface IMyCollection : IEnumerable<IMyObject> { int Count { get; } IMyObject this[int index] { get; } } 公共接口IMyCollection:IEnumerable { 整数计数{get;} IMyObject此[int索引]{get;} } 我得到: 无法将表达式类型IEnumerable转换为IM

有了这个接口,我如何使用moq模拟这个对象

public interface IMyCollection : IEnumerable<IMyObject>
{
    int Count { get; }
    IMyObject this[int index] { get; }
}
公共接口IMyCollection:IEnumerable
{
整数计数{get;}
IMyObject此[int索引]{get;}
}
我得到:

无法将表达式类型IEnumerable转换为IMyCollection


在计数的情况下,需要使用SetupGet()。对于索引器,使用

mock.Setup(m => m[It.IsAny<int>()])
mock.Setup(m=>m[It.IsAny())
返回所需的值

var itemMock=new Mock();
var itemMock = new Mock<IMyObject>();
List<IMyObject> 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());
列表项=新列表{itemMock.Object};//m、 返回(()=>items.Count); mock.Setup(m=>m[It.IsAny()])。返回(i=>items.ElementAt(i)); mock.Setup(m=>m.GetEnumerator())。返回(()=>items.GetEnumerator());

模拟将使用具体的
列表
包装并公开测试所需的行为。

对于我的用例,我需要返回一个空的IEnumerable

mockObj.Setup(x => x.EnumerateBlah()).Returns(Enumerable.Empty<MyType>);
mockObj.Setup(x=>x.EnumerateBlah()).Returns(Enumerable.Empty);

为什么不直接执行
IList
?@ShaneKm正如您所知,从.NET 4.5开始,.NET中内置了一个类型,它与您尝试执行的契约完全一致,一年后,它已经被应用于
List
等内置类型,这节省了我的时间!谢谢大家!+1.