【问题标题】:Net Core: Declare and Initialize new Enumerable in Moq statementNet Core:在 Moq 语句中声明和初始化新的 Enumerable
【发布时间】:2020-01-20 00:42:22
【问题描述】:

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

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

试图研究这篇文章:

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

【问题讨论】:

  • 你不能初始化一个可枚举的。它是一个界面
  • 使用.Returns(Enumerable.Empty&lt;ProductResult&gt;())
  • 嗨@Fenixil 也可以随时写答案,谢谢!

标签: c# linq unit-testing .net-core moq


【解决方案1】:

你的起订量应该是这样的。不需要做 AsEnumerable,因为 List 是 IEnumerable 的实现。

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

我相信你的方法是这样的:

IEnumerable<ProductResult> GetProductStatus(bool someValue);

通过列表,您可以执行 Count、Linq Any 等操作。

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

【讨论】:

    【解决方案2】:

    我只能用这个有限的信息做出一个疯狂的猜测。 你能把.AsEnumerable() { }删掉看看吗?

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

    【讨论】:

      【解决方案3】:

      如果您只需要返回空的IEnumerable,您可以使用Enumerable.Empty。如果你需要非空集合,那么你可以返回任何集合,因为它们都实现了IEnumerable

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        • 1970-01-01
        • 2017-01-18
        • 1970-01-01
        相关资源
        最近更新 更多