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