1
我寫我的控制器單元測試。 本次測試使用的是內部使用一個模擬的DbContext的實際存儲庫類。我在這篇幫助文章中創建了dbset,它工作得很好 - 除了每個單元測試只能運行一次。EF庫返回dbset只有一次
http://codethug.com/2015/03/20/mocking-dbset/
這意味着:
IQueryable<User> membersQuery = this.unitOfWork.UserRepository.Get();
List<User> members = membersQuery.ToList(); //here I get 6 members
membersQuery = this.unitOfWork.UserRepository.Get();
members = membersQuery.ToList(); //when its called again, I get 0 members
爲什麼會那樣做的,我希望它返回768,16成員兩次相同的集合。
這裏是我創建存儲庫
var enumerable = new List<User>();
// ... populate the mocks list
var mockedContext = new Mock<MyDbContext>();
mockedContext.Setup(c => c.Users).ReturnsDbSet(enumerable);
mockedContext.Setup(c => c.Set<User>()).ReturnsDbSet(enumerable);
var repo = new Mock<IRepository<User>>();
return new Repository<User>(mockedContext.Object, this.logger);
爲了清楚起見,庫代碼的一些最重要的位:
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
protected internal MyDbContext Context;
protected internal DbSet<TEntity> DbSet;
public Repository(MyDbContext context)
{
this.Context = context;
this.DbSet = context.Set<TEntity>();
}
public virtual IQueryable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null)
{
IQueryable<TEntity> query = this.DbSet;
if (filter != null)
{
query = query.Where(filter);
}
return query;
}
任何想法,爲什麼它這樣做呢?