簡體   English   中英

如何使用多個子句對Entity Framework的異步方法進行單元測試

[英]How to unit test async methods of Entity Framework with a multiple clauses

我正在嘗試使用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 ,這也有效,所以問題似乎有多個子句。

終於在這里找到了答案

需要像這樣添加IQueryable:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM