當使用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,但不知道如何克服這一點。有沒有人遇到類似的問題?有誰知道任何解決方案?謝謝。
這絕對可以工作,我想。做這樣的事情的過程是什麼?我會將此問題複製到您提供的鏈接中。 – TMan
太棒了)我會在週末嘗試提出這個要求。 –