2014-01-08 28 views
3

我試圖用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,也工作,所以這個問題似乎有多個條款。

回答

2

終於找到了答案here.

IQueryable的需要,像這樣加入:

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

感謝你爲這個,我一直在尋找在錯誤的地方,是在完全失去它的邊緣。 –

相關問題