我正在准备我的测试基础架构,但是我的测试存储库遇到了一些问题。
真正的存储库访问EntityFramework DbSet,如下所示:
public class Repository<T>: IRepository<T> where T : ModelBase
{
protected ApplicationDbContext db;
private DbSet<T> dbSet;
public Repository(ApplicationDbContext db)
{
this.db = db;
dbSet = db.Set<T>();
}
public IQueryable<T> Where(Expression<Func<T, bool>> predicate)
{
return dbSet.Where(predicate).AsNoTracking();
}
....
我的TestRepository使用List而不是DbSets:
public class TestRepository<T> : IRepository<T> where T : ModelBase
{
private readonly List<T> dbSet;
protected ApplicationDbContextFake db;
public TestRepository(ApplicationDbContextFake db)
{
this.db = db;
this.dbSet = db.Set<T>();
}
此db.Set<T>()
返回一个列表
测试我的代码时会出现问题,有类似的内容:
public async Task DeleteAsync()
{
var items = repository.Where(....);
repository.RemoveRange(await items.ToListAsync());
此代码使用Entity DbSets运行正常,但在使用我的TestRepository进行测试时会抛出异常:
源IQueryable未实现IAsyncEnumerable。只有实现IAsyncEnumerable的源才能用于Entity Framework异步操作。
有任何建议可以解决这个问题吗?
答案 0 :(得分:2)
如果您使用的是EntityFramework Core(不是EF6) - 您可以在测试中使用内存实现。