使用 Z.EntityFramework.Plus 扩展时,我无法找到一种方法来模拟/替换在使用任何 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);
}
不使用期货它工作正常。我尝试了几种不同的方法,但总是出错。大多数情况下,它是“oops Z 扩展遇到错误”异常。
我在想这是因为 Z 扩展期待一个真正的 ObjectContext 但不确定如何克服这个问题。有没有人遇到过类似的问题?有谁知道任何解决方案?谢谢。