新手试图使用Moq进行可枚举的方法

时间:2011-09-13 01:37:33

标签: moq

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

IEnumerable<PickList> GetPickLists();

我不确定我该怎么嘲笑这个......我尝试过这样的事情,但我得到了恭维错误(我知道以下内容) 返回()不正确,但无法弄清楚要在Return体中放入什么:

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没有足够的样本供我使用,其中一些教程似乎使用过时的方法,也没有覆盖枚举,这对我来说很棘手:(

任何提示都将不胜感激。

1 个答案:

答案 0 :(得分:11)

尝试

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。一些链接:

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