1

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を期待しているが、これを克服する方法がわからないためだと思っています。誰も同じような問題を経験しましたか?誰もが解決策を知っていますか?ありがとう。

答えて

1

未来の機能は、実際にはObjectContextと期待しています。コンテキストが見つからないのでメソッドGetDbContextが呼び出されたときに現在のシナリオが失敗すると思います。

私は回避策は認識していませんが、UseMockContextなどのオプションを追加して、すべてのクエリをバッチせずに解決できる可能性があります(まったく新しい機能を使用しない場合とまったく同じです)。

このオプションを追加すると、現在の問題を解決できる可能性があります。

このような場合は、私はあなたがここでの問題を作成するお勧め:https://github.com/zzzprojects/EntityFramework-Plus/issues

+0

これは私が考えて間違いなく動作することができます。このようなことをするプロセスは何ですか?私はこの問題をあなたが提供したリンクにコピーします。 – TMan

+0

素晴らしい;)私は週末にこのリクエストをしようとします。 –