gpt4 book ai didi

moq - 新手尝试将 Moq 用于可枚举方法

转载 作者:行者123 更新时间:2023-12-04 02:06:04 28 4
gpt4 key购买 nike

我想看看 Moq 是否是我想在新项目中使用的东西,因为我使用的其他模拟框架正在挑战恕我直言。例如,我有一个方法:

IEnumerable<PickList> GetPickLists();

我不确定我应该如何 mock 这个......我已经尝试过这样的事情,但我遇到了编译错误(我知道以下内容
Returns() 不正确,但无法弄清楚在 Returns 正文中放什么:
var mockCrm = new Mock<ICrmProvider>();
mockCrm.Setup<IEnumerable<PickList>>(foo => foo.GetPickLists())
.Returns<IEnumerable<PickList>>({});

另外,尝试模拟这两种方法:
CustomerSyncResult ApplyActions(IEnumerable<CustomerAction> actions);
IEnumerable<Customer> GetCustomers(IEnumerable<string> crmIDs, IEnumerable<string> emails);

我知道我问的是一个笼统的问题,但我很难开始。下载中的 CHM 对我来说没有足够的示例,而且那里的一些教程似乎使用过时的方法并且没有涵盖枚举,这对我来说很棘手:(

任何提示将不胜感激。

最佳答案

尝试

mockCrm.Setup(x => x.GetPickLists())
.Returns(new List<PickList>());

QuickStart是一个很好的引用。

其他方法的一些示例:
mockCrm.Setup(x => x.ApplyActions(It.IsAny<IEnumerable>()))
.Returns(new CustomerSyncResult());

mockCrm.Setup(x => x.GetCustomers(It.IsAny<IEnumerable>(),
It.IsAny<IEnumerable>()))
.Returns(new List<Customers>());

顺便说一句,在您的原始界面中使 IEnumerable 泛型以获得更好的类型安全性。

您还可以使用新的 Moq v4 功能规范:
var list = new List<PickList> { new PickList() };

ICrmProvider crm =
Mock.Of<ICrmProvider>(
x =>
x.GetPickLists() == list);

目前没有很好的记录。请注意,您不再需要写 mock.Object .一些链接:
  • Old style imperative mocks vs moq functional specifications
  • Moq Discussions: Mock.Of - how to specify behavior?

  • 确切的语法(使用 It.Is、列表的内容等)将取决于您要完成的任务。 It.IsAny将匹配任何参数,这将使处理序列或集合参数时更容易。

    关于moq - 新手尝试将 Moq 用于可枚举方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7395897/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com