我正在尝试使用 Moq 4.0.10827 对 EF 6.0.2 中的异步方法进行单元测试,但我遇到了似乎是转换问题的问题。
以下工作正常:
public async Task<List<Testimonial>> GetByEventIdAsync(int eventId)
{
var query = from t in _context.Testimonials
orderby t.Ordinal
select t;
var result = query
.ToListAsync()
.ConfigureAwait(false);
return await result;
}
但是下面的中断(添加了一个 where 子句)
public async Task<List<Testimonial>> GetByEventIdAsync(int eventId)
{
var query = from t in _context.Testimonials
where t.EventId == eventId
orderby t.Ordinal
select t;
var result = query
.ToListAsync()
.ConfigureAwait(false);
return await result;
}
我做了一些调试,发现如下
var q1 = _context.Testimonials; // Type = Castle.Proxies.IDbSet`1Proxy_1
var q2 = q1.Where(t => t.EventId == eventId); // Type = TestDbAsyncEnumerable`1 (from linked code)
var q3 = q2.OrderBy(o => o.Ordinal); // Type = System.Linq.EnumerableQuery`1
为什么 class double 消失了?我该如何解决?
更新:我还发现,如果我添加 where
并删除 orderby
,这也有效,所以问题似乎是有多个子句。
最佳答案
终于找到答案here.
IQueryable 需要像这样添加:
public class TestDbAsyncEnumerable<T>
: EnumerableQuery<T>, IDbAsyncEnumerable<T>, IQueryable
关于c# - 如何使用多个子句对 Entity Framework 的异步方法进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005331/