模拟和IQueryable <T>

时间:2020-03-05 18:41:49  来源:igfitidea点击:

尝试测试基于NHibernate的IRepository时遇到了一个问题:

public class NHibernateRepository<T>: Disposable, IRepository<T> 
    where T : IdentifiableObject
{
    ...

    public IQueryable<T> Query()
    {
        return NHibernateSession.Linq<T>();
    }
}

如何在地狱中模拟以返回给定集合的方式返回IQueryable &lt;T>以交换某些表达式。我觉得我对IQueryable &lt;T>有一些误解...

解决方案

回答

在Moq中,它将是:

mockRepository.Expect( r => r.Query() ).Returns( myEnumerable.AsQueriable() );

RhinoMocks中将是:

Expect.Call( repository.Query() ).Return( myEnumerable.AsQueriable() );