Como testar métodos assíncronos de teste de unidade do Entity Framework com múltiplas cláusulas
-
20-12-2019 - |
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.
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