Вопрос новичка о насмешках и мох фреймворке - PullRequest
3 голосов
/ 02 октября 2010

Я использую инфраструктуру Moq в c # для насмешек в модульных тестах, но есть одна вещь, которую я еще не до конца понимаю. У меня есть эта строка кода

var feedParserMock = new Mock<ApplicationServices.IFeedParser>();
feedParserMock.Setup(y => y.ParseFeed(csv)).Returns(items).Verifiable();

Вторая строка означает, что она вернет значение, только если переданный параметр будет таким же? потому что параметр, который я передаю ParseFeed внутри моего контроллера, встроен в контроллер, и у меня нет доступа к нему в модульном тесте. В настоящее время метод возвращает значение null, есть ли способ указать, что я хочу вернуть переменную items независимо от того, какой это параметр?

Ответы [ 2 ]

7 голосов
/ 02 октября 2010

Да. Moq предоставляет статический класс It, который имеет вспомогательные методы для задания параметров, которые удовлетворяют определенным критериям. Ваш пример может быть:

feedParserMock.Setup(y => y.ParseFeed(It.IsAny<string>())).Returns(items).Verifiable();

Тогда Moq будет соответствовать вашей настройке, учитывая, что параметр имеет заданный тип и ненулевой (я выбрал здесь строку, вы, конечно, должны заменить ее на правильный тип вашего параметра, чтобы код компилировался) ,

Вы также можете передать делегату, который Moq будет проверять, чтобы определить, соответствует ли установка. Пример:

feedParserMock.Setup(y => y.ParseFeed(It.Is<string>(s => s.Length > 3));

Это будет соответствовать любым вызовам методов в ParseFeed, где параметр является строкой с длиной больше 3.

Ознакомьтесь с разделом «Соответствующие аргументы» руководства по быстрому запуску Moq , чтобы узнать больше.

2 голосов
/ 02 октября 2010

Да, вы можете использовать It.IsAny ()

, например

feedParserMock.Setup(y => y.ParseFeed(It.IsAny<string>())).Returns(items).Verifiable();
...