C#测试修改的会话变量

时间:2011-09-30 20:24:31

标签: c# asp.net session testing

现在我正在尝试测试Session变量。例如我设置:

Session["test"] = "test";

然后:

if (blah) { Session["test"] = "foo"; }
else if (testing) { Session["test"] = "foo2"; }

我希望能够运行测试,以便根据我提出的条件,我可以看到Session变量已经适当地改变了。我尝试过使用Moq,我可以创建一个Mock Session,然后定义一个变量来返回特定的东西:

controllerContext.Setup(x => x.HttpContext.Session["test"]).Returns("test");

虽然在测试中运行但这并没有改变。 如果我通过使用Session包装器强力键入变量,似乎更加复杂,因为我尝试在控制器之间传递模拟会话和上下文。

我读了一些关于FakeContext和Fake Sessions的内容,而不是Mock。我也听过一些关于使用代表的消息。实际上,我只是想模仿代码实际运行时发生的事情,并确保最终结果是我所期望的,并且它通常取决于我的Session变量。正确地进行测试修改的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

很高兴看到你使用了Moq,在这种情况下,如果代码试图设置会话,你可以断言会话的值,而不是断言会话的值。基本上断言行为..

以下是一些有用的链接:

ASP.NET MVC Unit Testing - Sessions

ASP.NET MVC Tip #12 – Faking the Controller Context