Comment tester unitairement les méthodes asynchrones d'Entity Framework avec plusieurs clauses
-
20-12-2019 - |
Question
J'essaie de tester unitairement une méthode asynchrone dans EF 6.0.2 avec Moq 4.0.10827 et je suis bloqué dans ce qui semble être un problème de diffusion.
Ce qui suit fonctionne bien :
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;
}
mais les pauses suivantes (ajout d'une clause 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;
}
J'ai fait un peu de débogage et j'ai trouvé ce qui suit
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
Pourquoi la double classe disparaît-elle ?Et comment puis-je y remédier ?
MISE À JOUR: J'ai aussi découvert que si j'ajoute le where
en arrière et retirez le orderby
, cela fonctionne également, donc le problème semble être dû à plusieurs clauses.
La solution
J'ai enfin trouvé la réponse ici.
IQueryable devait être ajouté comme ceci :
public class TestDbAsyncEnumerable<T>
: EnumerableQuery<T>, IDbAsyncEnumerable<T>, IQueryable
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow