Как объединить тесты асинхронных методов Entity Framework с несколькими оговорками

c# entity-framework entity-framework-6 unit-testing

Вопрос

Я пытаюсь выполнить тестирование асинхронного метода в 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

Почему класс дважды исчезает? И как мне это исправить?

UPDATE: Я также обнаружил , что если я добавляю where назад и удалить orderby , который также работает, так что вопрос , как представляется, наличие нескольких положений.

Принятый ответ

Наконец нашел ответ здесь.

IQueryable нужно было добавить так:

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


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему