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.

Était-ce utile?

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
scroll top