Модульное тестирование Z Entity Framework Plus Расширения

При использовании расширений Z.EntityFramework.Plus я не могу найти способ смоделировать / заменить то, что возвращает контекст, когда используется любое из расширений плюс, а не только Future(). Все, что я пробую, создает исключение NullReferenceException в будущей библиотеке расширений z.

Пример репозитория:

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

Хранилище модульных тестов:

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

Без использования фьючерсов все работает нормально. Я пытался издеваться над несколькими разными способами, но всегда получаю ошибку. В большинстве случаев это исключение "oops Z extensions обнаружил ошибку".

Я думаю, это потому, что Z-расширения ожидают реального ObjectContext, но не уверены, как это преодолеть. Кто-нибудь сталкивался с подобными проблемами? Кто-нибудь знает какие-либо решения? Благодарю.

1 ответ

Особенность будущего - это настоящее ObjectContext, Я считаю, что текущий сценарий не работает, когда метод GetDbContext вызывается, так как контекст не может быть найден.

Я не знаю об обходном пути, но возможно добавить опцию, такую UseMockContext это разрешит все запросы без их пакетирования (точно так, как если бы вы не использовали функцию Future).

Дайте мне знать, если добавление этой опции может решить вашу текущую проблему.

Если это так, я предлагаю вам создать проблему здесь: https://github.com/zzzprojects/EntityFramework-Plus/issues

Другие вопросы по тегам