0
I'm使用起訂量嘲笑我的應用程序的一些對象,而現在,我需要模擬這一呼籲:模擬深層次的方法
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")
起訂量返回模擬不帶擴展方法的工作。根據錯誤信息,可以推斷'GetInt32'是一種擴展方法。儘量避免嘲笑你不能控制的類型。建議:將您試圖訪問的內容封裝在您控制的抽象背後,以便在需要時進行模擬。 – Nkosi
@Nkosi - 它有點不同。擴展方法正在使用的類型可能會被模擬。 (仍然可以直接執行此操作,但需要設置模擬層次結構) – Pawel
@Pawel是正確的,並且可以在這種情況下工作,因爲所討論的擴展方法的源代碼是開源的,所以我們能夠確定需要什麼嘲笑擴展方法的工作。請注意,對於封閉源代碼擴展,同樣不適用。 – Nkosi