Я провел вечер, пытаясь издеваться над объектом, который реализует IQueryable:
public interface IRepo<T> : IQueryable<T>
{
}
Лучшее, что я мог придумать, это что-то вроде этого:
var items = new Item[] {}.AsQueryable();
var repo = new Mock<IRepo>();
repo.Setup(r => r.GetEnumerator()).Returns(items.GetEnumerator());
repo.Setup(r => r.Provider).Returns(items.Provider);
repo.Setup(r => r.ElementType).Returns(items.ElementType);
repo.Setup(r => r.Expression).Returns(items.Expression);
Есть ли более краткий способ сделать то же самое? Было бы проще разоблачить свойство/метод в IRepo, который возвращает IQueryable и просто макет:
repo.Setup(r => r.GetItems()).Returns(new Items[]{ }.AsQueryable());
Но это не то, что я хочу сделать =)