My original search was "mocking dbsets does not return all entries" and I found an entry that appeared to describe my problem.
DbSet mock, no results while calling ToList secondly
However, the solution uses the following syntax
q.Setup(m => m.GetEnumerator()).Returns( () => queryableData.GetEnumerator() );
which gives me this compiler error "Cannot convert lambda expression to type 'System.Collections.Generic.IEnumerator' because it is not a delegate type"
Other searches suggest I add using statements which I already have:
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data;
Here's my method (I'm using RhinoMocks and the other poster was using Moq but I don't think that's my problem)
private static IDbSet<T> GetDbSetTestDouble<T>(List<T> data) where T : class
{
IQueryable<T> queryable = data.AsQueryable();
IDbSet<T> dbSet = MockRepository.GenerateMock<IDbSet<T>, IQueryable>();
dbSet.Stub(m => m.Provider).Return(queryable.Provider);
dbSet.Stub(m => m.Expression).Return(queryable.Expression);
dbSet.Stub(m => m.ElementType).Return(queryable.ElementType);
// Cannot convert lambda expression to type 'System.Collections.Generic.IEnumerator<T>' because it is not a delegate type
dbSet.Stub(m => m.GetEnumerator()).Return( () => queryable.GetEnumerator());
}