更新时间:2023-02-14 15:48:55
首先创建一个名为mockHttpSession的类,并从ISession继承.
First create class Named mockHttpSession and inherit from ISession.
public class MockHttpSession : ISession
{
Dictionary<string, object> sessionStorage = new Dictionary<string, object>();
public object this[string name]
{
get { return sessionStorage[name]; }
set { sessionStorage[name] = value; }
}
string ISession.Id
{
get
{
throw new NotImplementedException();
}
}
bool ISession.IsAvailable
{
get
{
throw new NotImplementedException();
}
}
IEnumerable<string> ISession.Keys
{
get { return sessionStorage.Keys; }
}
void ISession.Clear()
{
sessionStorage.Clear();
}
Task ISession.CommitAsync()
{
throw new NotImplementedException();
}
Task ISession.LoadAsync()
{
throw new NotImplementedException();
}
void ISession.Remove(string key)
{
sessionStorage.Remove(key);
}
void ISession.Set(string key, byte[] value)
{
sessionStorage[key] = value;
}
bool ISession.TryGetValue(string key, out byte[] value)
{
if (sessionStorage[key] != null)
{
value = Encoding.ASCII.GetBytes(sessionStorage[key].ToString());
return true;
}
else
{
value = null;
return false;
}
}
}
然后在实际控制器中使用此会话:
Then use this session in actual controller:
Mock<HttpContext> mockHttpContext = new Mock<HttpContext>();
MockHttpSession mockSession = new MockHttpSession();
mockSession["Key"] = Value;
mockHttpContext.Setup(s => s.Session).Returns(mockSession);
Controller controller=new Controller();
controller.ControllerContext.HttpContext = mockHttpContext.Object;