“Faking"asp.net mvc中控制器的会话变量(httpessionstatebase)
本文关键字:会话 控制器 变量 httpessionstatebase mvc Faking quot net asp | 更新日期: 2023-09-27 18:06:09
我目前正在使用Microsoft Fakes进行单元测试,并测试使用一些会话变量的控制器。由于在单元测试创建期间,无论何时运行单元测试,都没有启动会话,因此我遇到了NullReferenceException。我见过很多用Moqs做的问题和答案,但我想用微软的Fakes。我知道我需要使用shims来伪造会话变量,因为我不清楚会话是如何创建的。请告诉我一个会话是如何创建的,这样我就可以伪造它,如果可能的话,请让我知道如何在microsoft fakes
你可以这样做:
public class SomeClass
{
public bool SomeMethod()
{
var session = HttpContext.Current.Session;
if (session["someSessionData"].ToString() == "OK")
return true;
return false;
}
}
[TestMethod]
public void SomeTestMethod()
{
using (ShimsContext.Create())
{
var instanceToTest = new SomeClass();
var session = new System.Web.SessionState.Fakes.ShimHttpSessionState();
session.ItemGetString = (key) => { if (key == "someSessionData") return "OK"; return null; };
var context = new System.Web.Fakes.ShimHttpContext();
System.Web.Fakes.ShimHttpContext.CurrentGet = () => { return context; };
System.Web.Fakes.ShimHttpContext.AllInstances.SessionGet =
(o) =>
{
return session;
};
var result = instanceToTest.SomeMethod();
Assert.IsTrue(result);
}
}
详情请参阅http://blog.christopheargento.net/2013/02/02/testing-untestable-code-thanks-to-ms-fakes/。祝你过得愉快。