Net Core:在 Moq 语句中声明并初始化新的 Enumerable

Net Core: Declare and Initialize new Enumerable in Moq statement

我试图在 Moq 语句中声明并初始化一个空的 IEnumerable。出于某种原因,我尝试将 ProductResult 声明为 Enumerable 的最后一部分失败了。我可以在最小起订量声明中执行此操作吗?

mock.Setup(b => b.GetProductStatus(It.IsAny<bool>())).Returns(new List<ProductResult>().AsEnumerable() { });

正在尝试研究这篇文章:

IEnumerable<object> a = new IEnumerable<object>(); Can I do this?

根据这些有限的信息,我只能胡乱猜测。 你能删除 .AsEnumerable() { } 看看吗?

  1. {} 很奇怪,它不是正确的 C# 代码。
  2. List 实现了 IEnumerable,因此您不需要 .AsEnumerable()

你的最小起订量应该是这样的。无需执行 AsEnumerable,因为 List 是 IEnumerable 的实现。

 mock.Setup(x => x.GetProductStatus(It.IsAny<bool>()))
.Returns(new List<ProductResult>());

我认为你的方法是这样的:

IEnumerable<ProductResult> GetProductStatus(bool someValue);

使用列表,您可以执行计数、Linq Any 等操作。

有关更多信息,快速入门是一个很好的参考。 Link 这里: https://code.google.com/archive/p/moq/wikis/QuickStart.wiki

如果您只需要return清空IEnumerable,您可以使用Enumerable.Empty。如果你需要非空集合,那么你可以 return any,因为它们都实现了 IEnumerable.

.Returns(Enumerable.Empty<ProductResult>())
.Returns(new[] {1, 2, 3})