当使用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
太棒了)我会在周末尝试提出这个要求。 –