0
- 私自分のアプリケーションのいくつかのオブジェクトを模擬するために部品番号を使用して、そして今のところ、私はこの呼び出しを模擬する必要があります。モック深いレベルのメソッド
accessor.HttpContext.Session.GetInt32("offset");
私はこの方法を実行しようとしましたが、機能していません。
var mock = new Mock<HttpContextAccessor>();
mock.Setup(x => x.HttpContext.Session.GetInt32("offset"))
.Returns(0);
それはこのエラーを発生させます:
System.NotSupportedException : Expression references a method that does not belong to the mocked object: x => x.HttpContext.Session.GetInt32("offset")
部品番号からモックを返す(
ISession
インターフェイス上TryGetValue
を呼び出しGetInt32
コールGet
)を返すようにISession
インターフェイスを模擬する必要があります。これはエラーメッセージに基づいて、 'GetInt32'が拡張メソッドであると推論することができます。あなたがコントロールしていない型を欺くのは避けてください。アドバイス:あなたが制御している抽象化の背後でアクセスしようとしているものを包み込み、必要なときに嘲笑することができます。 – Nkosi@Nkosi - それはちょっと違う。拡張メソッドで使用されている型を嘲笑することができます。 (これを直接行うことはできますが、モック階層を設定する必要があります) – Pawel
@Pawelこれは正しいです。問題の拡張メソッドのソースがオープンソースであるため、このような状況で動作するはずです。拡張メソッドが機能するように嘲笑したクローズドソースエクステンションについては同じことが成り立たないことに注意してください。 – Nkosi