IMPORTANT: MAJOR BREAKING CHANGE COMING SOON

单元测试Z实体框架Plus扩展

c# entity-framework entity-framework-plus nsubstitute unit-testing

当使用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



Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow