繁体   English   中英

如何使用Rhino模拟测试异步查询

[英]How to test asynchronous queries with rhino mocks

以下是我的功能

 public async Task<IEnumerable<Books>> GetAsync(Guid customerId) {
        var BookList= await _bookStore.FindBy(AnExpression(customerId)).ToListAsync();
        return vehicleList;
    }

我试图模拟_bookStore.FindBy()方法,该方法返回IQueryable

  var Books= new List<Books>(2){
                new Books(),
                new Books()
            }.AsQueryable();

 mock.Expect(viewStore => viewStore.FindBy(Arg<Expression<Func<Books, bool>>>.Is.Anything)).Return(Books);

viewStore是一个接口:

public interface IRepository<T> : IDisposable where T : class
{
    IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);
}

我收到以下错误

System.InvalidOperationException:源IQueryable没有实现IDbAsyncEnumerable。 仅实现IDbAsyncEnumerable的源可用于Entity Framework异步操作

我尝试实现像https://msdn.microsoft.com/zh-cn/data/dn314429#async的 AsyncQueryProvider

但是实现是通过Moq而不是Rhino模拟显示的。

您必须使用在提供的链接中实现的TestDbAsyncEnumerable

更换:

var Books= new List<Books>(2){
            new Books(),
            new Books()
        }.AsQueryable();

mock.Expect(viewStore => viewStore.FindBy(Arg<Expression<Func<Books, bool>>>.Is.Anything))
    .Return(Books);

有:

var Books = new List<Books>(2){
            new Books(),
            new Books()
        }.AsQueryable();

var asycEnumarable = new TestDbAsyncEnumerable<Books>(Books);

var viewStore = MockRepository.GenerateStub<IRepository<Books>>();

viewStore.Stub(x => x.FindBy(Arg<Expression<Func<Books, bool>>>.Is.Anything))
         .Return(asycEnumarable);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM