c# - 使用最小起订量模拟 IEnumerable<T>

标签 c# asp.net unit-testing moq

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

public interface IMyCollection : IEnumerable<IMyObject>
{
    int Count { get; }
    IMyObject this[int index] { get; }
}

我得到:

can not convert expression type IEnumerable to IMyCollection

最佳答案

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());

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

关于c# - 使用最小起订量模拟 IEnumerable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41049588/

相关文章:

unit-testing - 测试部门的职责是什么?

c# - Visual Studio 2017 无法复制 dll,因为它正被 MSBuild.exe 进程使用

c# - 使用 linq 从 List<Postavke>() 查找属性值

c# - 为 Mac (C#/Mono) 创建一个没有停靠图标的应用程序

c# - 无法访问 .cs 文件的 'Build Action' 属性

c# - 异步编程与线程有何不同?

c# - 用 Action 包围一个函数

c# - 如何在 ASP.Net 中保存和打开 SMTP 邮件

python - 在单元测试中比较 numpy float 数组

php - 如何对不返回任何值的 php 类构造函数进行单元测试