【问题标题】:How to test asynchronous queries with rhino mocks如何使用 rhino 模拟测试异步查询
【发布时间】:2015-09-09 07:54:59
【问题描述】:

以下是我的功能

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

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

  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 的源才能用于实体框架异步操作

我尝试像 https://msdn.microsoft.com/en-us/data/dn314429#async 那样实现 AsyncQueryProvider

但是实现是用 Moq 而不是 Rhino mock 显示的。

【问题讨论】:

  • 请添加_vehicleViewStore的代码。
  • @OldFox。它实际上是 bookStore 及其存储库对象。基本上是dbcontext。实体框架
  • 我知道...我要求实现,因为我想在...之前调试我的答案。
  • return Context.Set().Where(predicate);
  • 这是方法的主体 :\ 我要了你嘲笑的类 (_vehicleViewStore)

标签: c# entity-framework unit-testing rhino-mocks iqueryable


【解决方案1】:

您必须使用在您提供的链接中实现的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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多