如何使用 rhino mocks 测试异步查询
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() 方法 returns 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/en-us/data/dn314429#async
那样实现 AsyncQueryProvider
但是显示的实现是用 Moq 而不是 Rhino mock。
您必须使用 TestDbAsyncEnumerable
,它已在您提供的 link 中实现。
替换:
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);
以下是我的函数
public async Task<IEnumerable<Books>> GetAsync(Guid customerId) {
var BookList= await _bookStore.FindBy(AnExpression(customerId)).ToListAsync();
return vehicleList;
}
我试图模拟 _bookStore.FindBy() 方法 returns 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/en-us/data/dn314429#async
那样实现 AsyncQueryProvider但是显示的实现是用 Moq 而不是 Rhino mock。
您必须使用 TestDbAsyncEnumerable
,它已在您提供的 link 中实现。
替换:
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);