問題タブ [notimplementedexception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
435 参照

moq - '((System.Linq.IQueryable)((Moq.Mock)(m​​ockDbSet)).Object).Provider' がタイプ 'System.NotImplementedException' の例外をスローしました

複数の DbSet とその DbContext をモックしようとしています。私はこれについて困惑しています。フィードバックをいただければ幸いです。

テストを実行すると、次の null 参照例外が発生します。

System.NullReferenceException : オブジェクト参照がオブジェクトのインスタンスに設定されていません。

ここで、テスト メソッドで例外がスローされます。

ただし、テスト メソッドから結果を返すクエリに問題があるようには見えません。この問題は、各モック DbSet のセットアップ中に発生するようであり、モック DbSet のセットアップが失敗したため、その後モック DbContext のセットアップが失敗し、null コンテキストがテスト メソッドに渡されたように見えます。以前に DbSet に moq を使用したことがありますが、この問題に遭遇したことはありません。

テストをデバッグすると、DbSet ごとに次の例外が表示されますMock<IQueryable<entity>>.Setup<IQueryProvider>(例mockPhysicalRights.As<IQueryable<WrPhysicalRight>>().Setup(m => m.Provider).Returns(physicalRights.Provider): )。

'((Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure)((Moq.Mock)(m​​ockPhysicalRights)).Object).Instance' は、タイプ 'System.NotImplementedException' '((System.Linq.IQueryable)((Moq. Mock)(' mockDbSet ')).Object).Provider' は、タイプ 'System.NotImplementedException' '((Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure)((Moq.Mock)(m​​ockPhysicalRights)).Object).Instance の例外をスローしました' 型 'System.NotImplementedException' '((System.Linq.IQueryable)((Moq.Mock)( mockDbSet)).Object).Expression' は、タイプ 'System.NotImplementedException' の例外をスローしました'System.NotImplementedException' '((System.Linq.IQueryable)((Moq.Mock)( mockDbSet )).Object).ElementType' がタイプ 'System.NotImplementedException' の例外をスローしました

デバッグ モードでの例外のスクリーンショットの例を次に示します。

((Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<System.IServiceProvider>)((Moq.Mock)(m​​ockPhysicalRights)).Object).Instance' は、タイプ 'System.NotImplementedException' の例外をスローしました

'((System.Linq.IQueryable)((Moq.Mock)(m​​ockPhysicalRights)).Object).Provider' がタイプ 'System.NotImplementedException' の例外をスローしました

スローされた同じ例外mockPhysicalRights.As<IQueryable<WrPhysicalRight>>().Setup(m => m.Provider).Returns(physicalRights.Provider)が以下でもスローされます。

'((System.Linq.IQueryable)((Moq.Mock)(m​​ockPhysicalRights)).Object).Expression' がタイプ 'System.NotImplementedException' の例外をスローしました

'((System.Linq.IQueryable)((Moq.Mock)(m​​ockPhysicalRights)).Object).ElementType' がタイプ 'System.NotImplementedException' の例外をスローしました

DbContext を設定するときは、

次のエラーが表示されます。

エラー CS0103: 名前 'm' は現在のコンテキストに存在しません

これはデバッグモードのスクリーンショットです。

エラー CS0103: 名前 'm' は現在のコンテキストに存在しません

うまくいけば、以下に関連するすべてのコードが含まれています。

DbContext - 簡単にするために、関係のないコードは省略されていると想定

DbSets - 簡単にするために、関係のないコードは省略されていると想定

テスト方法 - 簡単にするために無関係なコードは省略されていると想定

テスト