Как выполнить модульное тестирование асинхронных методов Entity Framework с несколькими предложениями
-
20-12-2019 - |
Вопрос
Я пытаюсь выполнить модульное тестирование асинхронного метода в EF 6.0.2 с Moq 4.0.10827, и меня блокируют из-за проблемы с кастингом.
Следующее работает нормально:
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
Почему исчезает класс double?И как мне это исправить?
ОБНОВЛЯТЬ: Я также обнаружил, что если я добавлю where
назад и снимите orderby
, это тоже работает, поэтому проблема, похоже, состоит из нескольких пунктов.
Решение
Наконец нашел ответ здесь.
IQueryable нужно было добавить так:
public class TestDbAsyncEnumerable<T>
: EnumerableQuery<T>, IDbAsyncEnumerable<T>, IQueryable
Не связан с StackOverflow