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

标签 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

为什么 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/

相关文章:

c# - Entity Framework 一对一关系?

c# - 如果测试失败,TestCleanUp 中的条件行为

c# - 测试 MVC5 Web 应用程序

c# - Josh Smith MVVM 演示应用程序

c# - 在 Richtextbox 上禁用平滑滚动

c# - 复杂对象不能被同一个实体多次引用

c# - Asp MVC Entity Framework 检查权限是否起作用

未测试的 GetAccounts 的 C# 单元测试最小起订量方法

java - Spring:模拟 beans 的正确方法

c# - MobileAppTracking 不起作用