Новичок пытается использовать Moq для перечислимого метода - PullRequest
11 голосов
/ 13 сентября 2011

Я пытаюсь понять, является ли Moq чем-то, что я хотел бы использовать в новом проекте, так как другие используемые для меня фреймворки бросают вызов IMHO. Так, например, у меня есть метод как таковой:

IEnumerable<PickList> GetPickLists();

Я не уверен, как я должен издеваться над этим ... Я пробовал что-то подобное, но я получаю ошибки комплимента (я знаю следующее 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 в загрузке недостаточно примеров для меня, и некоторые учебные пособия, похоже, используют устаревшие методы, а также не охватывают перечисления, что делает его сложным для меня: (

Любые советы будут с благодарностью.

1 Ответ

11 голосов
/ 13 сентября 2011

Попробуйте

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 будет соответствовать любому аргументу, что облегчит работу с параметрами последовательности или коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...