Z.EntityFramework.Plus拡張機能を使用すると、Future()だけでなく、プラスの拡張機能のいずれかが使用されているときに、コンテキストが返すものを模擬/置換する方法が見つかりません。私が試したものはすべて、zエクステンションの将来のライブラリ内で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 extensionsにエラーが発生しました"という例外があります。
Z拡張が実際のObjectContextを期待しているが、これを克服する方法がわからないためだと思っています。誰も同じような問題を経験しましたか?誰もが解決策を知っていますか?ありがとう。
これは私が考えて間違いなく動作することができます。このようなことをするプロセスは何ですか?私はこの問題をあなたが提供したリンクにコピーします。 – TMan
素晴らしい;)私は週末にこのリクエストをしようとします。 –