Lorsque j'utilise des extensions Z.EntityFramework.Plus, je ne trouve aucun moyen de simuler / substituer ce que le contexte renvoie lorsque l'une des extensions plus, pas seulement Future (), est utilisée. Tout ce que j’essaie renvoie une exception NullReferenceException dans la future bibliothèque d’extensions z.
Exemple de référentiel:
public Task<DocumentDomain> GetDocuments(int id)
{
var futureQuery1 = _context.ReportTypes.Where(x => x.IsReadOnly).Future();
var futureQuery2 = _context.Reports.Where(x => x.CreateDate < DateTime.Now.AddDays(-10)).Future();
var futureQuery3 = _context.Person.DeferredFirstOrDefault(x => x.Id == id).FutureValue();
return new DocumentDomain(futureQuery1.ToList(), futureQuery2.ToList(), futureQuery3.Value);
}
Répertoire de tests unitaires:
[Fact]
public async Task ShouldGetDocumentsForPerson1()
{
_context = Substitute.For<IMyDbContext>();
_context.ReportTypes = new FakeDbSet();
_context.ReportTypes.AddRange(GetFakeReportTypes());
// ...etc..arrange for Reports and Person
var repo = new DocumentRepository(_context);
// CRASHES HERE ON futureQuery1 at .Future()
var domain = await repo.GetDocuments(1); // fake id
Assert.IsTrue(domain.Documents.Count > 0);
}
Sans utiliser Futures, cela fonctionne bien. J'ai essayé de me moquer de différentes manières, mais j'ai toujours une erreur. La plupart du temps, il s'agit d'une exception "oops Z extensions a rencontré une erreur".
Je pense que c'est parce que les extensions Z attendent un vrai ObjectContext mais ne savent pas comment surmonter cela. Quelqu'un at-il rencontré des problèmes similaires? Est-ce que quelqu'un connaît des solutions? Merci.
La fonctionnalité Future attend un véritable ObjectContext
. Je crois que le scénario actuel échoue lorsque la méthode GetDbContext
est appelée car aucun contexte ne peut être trouvé.
Je ne suis pas au courant d'une solution de contournement, mais il est possible d'ajouter une option telle que UseMockContext
qui résoudra toutes les requêtes sans les mettre en lot (exactement comme si vous n'utilisiez pas la fonctionnalité Future).
Faites-moi savoir si l'ajout de cette option est quelque chose qui pourrait résoudre votre problème actuel.
Si tel est le cas, je vous suggère de créer un problème ici: https://github.com/zzzprojects/EntityFramework-Plus/issues