1

當使用Z.EntityFramework.Plus擴展時,我無法找到一種方法來模擬/替換上下文返回的任何加號擴展,而不僅僅是Future(),正在使用。我嘗試的所有內容都會在z extensions 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擴展遇到錯誤」異常。

我在想這是因爲Z擴展期望一個真正的ObjectContext,但不知道如何克服這一點。有沒有人遇到類似的問題?有誰知道任何解決方案?謝謝。

回答

1

未來功能期待一個真實的ObjectContext。我相信當方法GetDbContext被調用時,當前的情況會失敗,因爲沒有找到上下文。

我不知道解決方法,但可能會添加一個選項,如UseMockContext,它可以解決所有查詢而不用批量處理(就好像您未使用「未來」功能一樣)。

讓我知道如果添加此選項,它可以解決您目前的問題。

如果是這樣的話,我建議你在這裏創建一個問題:https://github.com/zzzprojects/EntityFramework-Plus/issues

+0

這絕對可以工作,我想。做這樣的事情的過程是什麼?我會將此問題複製到您提供的鏈接中。 – TMan

+0

太棒了)我會在週末嘗試提出這個要求。 –