我工作的ASP.NET MVC应用程序,并且想写对控制器的操作,其中一些操作上的HttpContext属性,如会议,Request.Cookies时,Response.Cookies,等我一些单元测试有一些麻烦搞清楚如何“安排,法,断言” ......我能看见安排并断言......但我无法搞清楚如何“动作”上的一个属性嘲笑HttpContextBase时,它的所有属性只有干将。 我无法从我的控制器操作中设置对我的嘲笑背景什么...所以它似乎并不十分有用。 我是相当新的嘲讽,所以我敢肯定有,我失去了一些东西,但它似乎合乎逻辑,我认为我应该能够创建一个模拟对象,我可以检查控制措施的情况下使用,我实际上可以设置属性值,再后来断言,他们仍然是我将它们设置为,或类似的东西。 我在想什么?
public static HttpContextBase GetMockHttpContext()
{
var requestCookies = new Mock<HttpCookieCollection>();
var request = new Mock<HttpRequestBase>();
request.Setup(r => r.Cookies).Returns(requestCookies.Object);
request.Setup(r => r.Url).Returns(new Uri("http://example.org"));
var responseCookies = new Mock<HttpCookieCollection>();
var response = new Mock<HttpResponseBase>();
response.Setup(r => r.Cookies).Returns(responseCookies.Object);
var context = new Mock<HttpContextBase>();
context.Setup(ctx => ctx.Request).Returns(request.Object);
context.Setup(ctx => ctx.Response).Returns(response.Object);
context.Setup(ctx => ctx.Session).Returns(new Mock<HttpSessionStateBase>().Object);
context.Setup(ctx => ctx.Server).Returns(new Mock<HttpServerUtilityBase>().Object);
context.Setup(ctx => ctx.User).Returns(GetMockMembershipUser());
context.Setup(ctx => ctx.User.Identity).Returns(context.Object.User.Identity);
context.Setup(ctx => ctx.Response.Output).Returns(new StringWriter());
return context.Object;
}