如何在.net Core中编写通用存储库模式的单元测试用例

如何解决如何在.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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?