次のようにして、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?!)。私は何を間違っていますか?セッターを使用すると、モックされたオブジェクトは実際にどうなりますか?