Pergunta

Estou tentando testar a unidade de um método assíncrono no EF 6.0.2 com Moq 4.0.10827 e estou sendo bloqueado no que parece ser um problema de transmissão.

O seguinte funciona bem:

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;
}

mas as seguintes quebras (adicionada uma cláusula 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;
}

Fiz algumas depurações e encontrei o seguinte

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

Por que a classe dupla está desaparecendo?E como faço para corrigir isso?

ATUALIZAR: Também descobri que se eu adicionar o where de volta e remova o orderby, isso também funciona, então o problema parece ter várias cláusulas.

Foi útil?

Solução

Finalmente encontrei a resposta aqui.

IQueryable precisava ser adicionado assim:

public class TestDbAsyncEnumerable<T> 
    : EnumerableQuery<T>, IDbAsyncEnumerable<T>, IQueryable
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top