如何解决如何在.net Core中编写通用存储库模式的单元测试用例
嗨,我正在尝试为通用存储库模式方法编写nunit测试用例。
下面是我在dbrepository中的方法。
public class DbRepository<T> : BaseRepository,IDbRepository<T>
where T : class
{
private readonly DbContext _dbContext;
private readonly DbSet<T> dbSet;
public DbRepository(DbContext dbContext)
{
_dbContext = dbContext;
dbSet = dbContext?.Set<T>();
}
public async Task<IEnumerable<T>> GetAsync(Expression<Func<T,bool>> filter = null,Func<IQueryable<T>,IOrderedQueryable<T>> orderBy = null,params Expression<Func<T,object>>[] includes)
{
IQueryable<T> query = this.dbSet;
foreach (Expression<Func<T,object>> include in includes)
{
query = query.Include(include);
}
if (filter != null)
{
query = query.Where(filter);
}
if (orderBy != null)
{
query = orderBy(query);
}
return await query.ToListAsync().ConfigureAwait(false);
}
}
然后我打算如下使用FakeDbSet。我在这里有点困惑。我在github https://github.com/tugberkugurlu/GenericRepository/blob/master/tests/GenericRepository.EntityFramework.Test/Infrastrucure/FakeDbSet.cs中找到了一个示例,这里有一些方法。在fakedbset中,我们是否需要在dbrepositry中编写完全相同的方法?下面是我的fakedbset类
public class FakeDbSet<T> : DbSet<T> where T : class
{
ObservableCollection<T> _data;
IQueryable _query;
public FakeDbSet()
{
_data = new ObservableCollection<T>();
_query = _data.AsQueryable();
}
public async Task<IEnumerable<T>> GetAsync(Expression<Func<T,object>>[] includes)
{
IQueryable<T> query = _query;
foreach (Expression<Func<T,object>> include in includes)
{
query = query.Include(include);
}
if (filter != null)
{
query = query.Where(filter);
}
if (orderBy != null)
{
query = orderBy(query);
}
return await query.ToListAsync().ConfigureAwait(false);
}
}
在上面的代码中,我添加了dbrepository中但在上面的方法代码中相同的方法GetAsync
IQueryable查询= _query;给出错误的代码无法将类型system.linq.Iqueryable隐式转换为system.linq.Iqueryable。
然后我写了我的其中一份考试
[Test]
public void TestGetAsync()
{
//Arrange
var mock = new Mock<OrdersRequestContext>();
mock.Setup(x => x.Set<OrdersRequestContext>())
.Returns(new FakeDbSet<OrderDetails>
{
new OrderDetails{ OrderDetailsId = 6}
});
var entityRepository = new DbRepository<OrderDetails>(mock.Object);
var orders = entityRepository.GetAsync();
}
由于上述错误,我无法运行此测试。我也想知道Fakedbset方法应该与我的dbrepository方法相同吗?我在IQueryable查询= _query中遇到错误;如我所说。因此,我正在以某种方式丢失某些东西,因此有人可以帮助我纠正这一点。任何帮助将不胜感激。谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。