По теме переполнения стека было несколько похожих вопросов, но я не нашел ничего, связанного с Moq как таковым.
То, что я пытаюсь сделать, - это заключить часть «где» в следующеезапрос:
MyObject o = (from mock in Mocks.Of<MyObject>()
where mock.Property == 1
select mock).First();
Так что я могу передать лямбда только с критериями (т.е. mock.Property == 1 часть).Моей первой (и, очевидно, неудачной) попыткой было следующее:
public static T GetMockOf<T>(Func<T, bool> predicate) where T : class
{
T obj = (from mock in Mocks.Of<T>()
where predicate(mock)
select mock).First();
return obj;
}
// ...
MyObject o = GetMockOf<MyObject>( mock => mock.Property == 1 );
Это сбой, потому что предикат вызывается для бесконечного числа mock - бесконечное число раз - и код зависает.Я попытался переключиться на Предикат.Invoke () вместо предиката (), но это заканчивается NotSupportedException.
При поиске через Переполнение стека я заметил, что люди предлагают использовать выражения, LinqKit или Dynamic Linq для аналогичных задач,тем не менее, для новичка Linq, такого как я, очень сложно углубиться в эти темы.
Возможно ли то, что я пытаюсь достичь с помощью Moq?Если так, какой самый простой способ достичь этого?Не уверен, что это что-то меняет, но я использую моно для кодирования, а не оригинал .NET.