J'ai passé une soirée à essayer de se moquer d'un objet qui implémente IQueryable :
public interface IRepo<T> : IQueryable<T>
{
}
Le mieux que j'ai pu trouver est quelque chose comme ça :
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);
Existe-t-il une façon plus concise de faire la même chose ? Il serait plus facile d'exposer une propriété/méthode dans IRepo qui renvoie IQueryable et le simulacre simplement comme ceci :
repo.Setup(r => r.GetItems()).Returns(new Items[]{ }.AsQueryable());
Mais ce n'est pas ce que je veux faire =)