我目前正致力于使用Microsoft Fakes进行单元测试并测试使用某些会话变量的控制器。 由于在单元测试创建期间没有启动任何会话,每当我运行单元测试时,我都遇到了NullReferenceException。我已经看到很多问题和答案使用Moqs,但我希望它在Microsoft Fakes中。 我知道我需要使用填充程序来伪造会话变量,因为我对于如何创建会话确实没有一个清晰的想法我被困在那里。 请解释我如何创建一个会话以便我可以伪造它,如果可能的话请告诉我如何用微软假货写它
答案 0 :(得分:2)
嗯,你可以这样做:
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/。 祝你有愉快的一天。