如何使用多个子句对Entity Framework的异步方法进行单元测试

时间:2014-01-08 20:00:13

标签: c# entity-framework unit-testing entity-framework-6

我正在尝试使用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

为什么班级双重消失?我该如何解决?

更新:我还发现,如果我添加where并删除orderby,这也有效,所以问题似乎有多个子句。< / p>

1 个答案:

答案 0 :(得分:2)

最后找到答案here.

需要像这样添加IQueryable:

public class TestDbAsyncEnumerable<T> 
    : EnumerableQuery<T>, IDbAsyncEnumerable<T>, IQueryable