Как мне издеваться над IQueryable <T>

Я создаю хранилище, которое предоставляет IQueryable. Каков лучший способ сделать это для моего юнит-тестирования?

Поскольку я использую RhinoMocks для остальных моих фиктивных объектов, я попытался сделать следующее:

IQueryable<MyObject> QueryObject = 
    MockRepository.GenerateStub<IQueryable<MyObject>>();

Это не работает, поэтому я попытался сделать это:

IQueryable<MyObject> QueryObject = 
    (new List<MyObject> { new MyObject() }).AsQueryable();

Есть ли лучший способ сделать это, или есть какие-то другие фальшивые фреймворки, в которые встроена поддержка IQueryable?

Мой интерфейс хранилища выглядит так:

public interface IRepository<T> where T : TableServiceEntity
{
    IQueryable<T> Table { get; }
    void Attach(T existingItem);
    void Delete(T itemToDelete);
    void Insert(T newItem);
    T Load(string partitionKey, string rowKey);
    IEnumerable<T> Load(string partitionKey);
    IEnumerable<T> Query(IQueryable<T> query);
    IEnumerable<T> Last(int count);
    T Last();
    void Update(T item);
}

Вот метод, который я хочу проверить:

public Post LoadPost(int year, int month, int day, string slug)
{
    var query = from p in _blogRepository.Table
                where 
                    p.PartitionKey == Key.Partition(year, month, day) 
                    && p.Slug == slug
                select p;

    var posts = _blogRepository.Query(query.Take(1));

    return posts.First();
}

Тогда вот тест, как у меня сейчас, который будет тестировать LoadPost.

[Fact]
public void LoadWillRetrieveByPartitionKeyAndRowKeyWhenUsingUriFormat()
{
    Repository
        .Stub(x => x.Query(Arg<IQueryable<Post>>.Is.Anything))
        .Return(new List<Post> {_post});

    var result = Service.LoadPost(
                            _post.Year(),
                            _post.Month(), 
                            _post.Day(), 
                            _post.Slug);

    Assert.NotNull(result);
}

Код взят из моегоAzureBlog проект.

Ответы на вопрос(4)

Ваш ответ на вопрос