【发布时间】:2014-05-29 02:19:55
【问题描述】:
我已经使用 FakeItEasy 模拟了 MVC 控制器中的会话对象:
var session = A.Fake<HttpSessionStateBase>();
A.CallTo(() => session["SomeKey"]).Returns("SomeValue");
Controller.ControllerContext = new ControllerContext(mockHttpContext, new RouteData(), Controller);
如果您在控制器操作中访问会话对象,它将返回正确的值:
public ActionResult Index()
{
var value = Session["Key"]; // value = "SomeValue" like it is supposed to
...
}
这个问题稍后会出现在控制器中,其中会话是通过这样的设置器使用相同的键设置的:
Session["Key"] = "SomeOtherValue";
然后当使用密钥时,它返回错误值:
var value = Session["Key"]; // value = "Key"
模拟会话不再返回我的模拟值,也不再返回新值,而是返回键(WTF?!)。我究竟做错了什么?当使用 setter 时,mocked 对象实际上会发生什么?
【问题讨论】:
标签: c# asp.net-mvc unit-testing session fakeiteasy