У меня проблема с проверкой того, что какой-то метод вызывался при имитации внутри запроса LINQ Select ().
Вот метод ContentManager, который я хочу протестировать:
public string ProcessElements(List<Item> items)
{
var processed = items.Select(item => item.Process(Constants.Text));
return Serialize(processed);
}
Iхочу проверить, что Process () вызывается для элементов списка.Мой метод теста выглядит следующим образом:
[TestMethod]
public void ProcessItems_ValidItems_ProcessCalled()
{
var contentManager = new ContentManager();
var itemMock = new Mock<Item>();
itemMock.Setup(m => m.Process(It.IsAny<string>()))
.Returns("serialized");
contentManager.ProcessElements(new List<Item>() { itemMock.Object });
itemMock.Verify(m => m.Process(It.IsAny<string>()), Times.Once());
}
Когда я запускаю этот тест, он не проходит и возвращает следующее сообщение:
Метод теста ProcessItems_ValidItems_ProcessCalled выбросил исключение:
Moq.MockException:
Ожидаемый вызов для макета хотя бы один раз, но никогда не выполнялся:
m => m.Process (It.IsAny ())
Нетнастройки настроены.
Не выполнено ни одного вызова.
Но если я изменю Select () на foreach, тогда тест проходит успешно:
public string ProcessElements(List<Item> iitem)
{
var processed = new List<string>();
foreach (var item in iitem)
{
processed.Add(item.Process(Constants.Text));
}
return Serialize(processed);
}
Что не так с Moq + Select ()?Как я могу это исправить?