"Faking" asp.net mvc 中控制器的会话变量(HttpSessionstateBase)
"Faking" Session variable(HttpSessionstateBase) of the controller in asp.net mvc
我目前正在使用 Microsoft Fakes 进行单元测试,并测试使用一些会话变量的控制器。
由于每当我进行 运行 单元测试时,在单元测试创建过程中都不会启动任何会话,因此我遇到了 NullReferenceException.I 已经看到很多使用 Moqs 进行的问题和答案,但我希望它在 Microsoft Fakes 中。
我知道我需要使用垫片来伪造会话变量,因为我不清楚会话是如何创建的,所以我被困在那里。
请向我解释会话是如何创建的,以便我可以伪造它,如果可能的话,请告诉我如何在 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/了解更多详情。
祝你有个愉快的一天。
我目前正在使用 Microsoft Fakes 进行单元测试,并测试使用一些会话变量的控制器。 由于每当我进行 运行 单元测试时,在单元测试创建过程中都不会启动任何会话,因此我遇到了 NullReferenceException.I 已经看到很多使用 Moqs 进行的问题和答案,但我希望它在 Microsoft Fakes 中。 我知道我需要使用垫片来伪造会话变量,因为我不清楚会话是如何创建的,所以我被困在那里。 请向我解释会话是如何创建的,以便我可以伪造它,如果可能的话,请告诉我如何在 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/了解更多详情。 祝你有个愉快的一天。