當使用Z.EntityFramework.Plus擴展時,我找不到一種方法來模擬/替換當使用任何加號擴展而不僅僅是Future()時上下文返回的內容。我嘗試的所有內容都會在z擴展未來庫中拋出NullReferenceException。
存儲庫示例:
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);
}
沒有使用Futures它工作正常。我試過嘲笑幾種不同的方法,但總是得到一個錯誤。大多數情況下,它是“oops Z擴展遇到錯誤”異常。
我在想它是因為Z擴展期望一個真正的ObjectContext但不知道如何克服這個問題。有沒有人遇到類似的問題?有誰知道任何解決方案?謝謝。
Future功能期待一個真正的ObjectContext
。我相信當調用方法GetDbContext
時,當前場景失敗,因為找不到上下文。
我不知道有一種解決方法,但可以添加一個選項,例如UseMockContext
,它將解析所有查詢而不對它們進行批處理(就像你沒有使用Future功能一樣)。
讓我知道如果添加此選項,它可以解決您當前的問題。
如果是這種情況,我建議你在這裡創建一個問題: https : //github.com/zzzprojects/EntityFramework-Plus/issues