当使用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,它运作正常。我试过嘲笑几种不同的方法,但总是出错。大多数情况下,它是一个&#34; oops Z扩展程序遇到错误&#34;例外。
我正在考虑它,因为Z扩展期望一个真正的ObjectContext,但不知道如何克服这个问题。有没有人遇到类似的问题?有谁知道任何解决方案?感谢。
答案 0 :(得分:1)
未来功能期待真正的ObjectContext
。我认为当调用方法GetDbContext
时当前场景失败,因为找不到上下文。
我不知道有一种解决方法,但可以添加一个选项,例如UseMockContext
,它将解析所有查询而不对其进行批处理(就像你没有使用Future功能一样)。
如果添加此选项,请告知我这可以解决您当前的问题。
如果是这种情况,建议您在此处创建问题:https://github.com/zzzprojects/EntityFramework-Plus/issues