【发布时间】:2013-12-14 19:48:38
【问题描述】:
我有一个单元测试可以测试包含太多段的路由,但我想将其扩展为测试 Response Status Code(应该返回 404 代码)。
是否可以使用模拟的 httpContext 并检查状态码?
HttpContextMock.Object.Response.StatusCode 总是返回 0 状态码(我想是因为模拟了 HttpContext 的一部分)。
[TestMethod]
public void RouteWithTooManySegments()
{
var routes = new RouteCollection();
MyApp.RouteConfig.RegisterRoutes(routes);
var httpContextMock = new Mock<HttpContextBase>();
var httpResponseMock = new Mock<HttpResponseBase>();
httpContextMock.Setup(c => c.Request.AppRelativeCurrentExecutionFilePath)
.Returns("~/dawd/dawdaw/dawdaw/daw");
RouteData routeData = routes.GetRouteData(httpContextMock.Object);
Assert.IsNull(routeData);
}
使用ErrorController在视图中返回状态码“404”和相应的Response Status Code:
public class ErrorController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult NotFound()
{
Response.StatusCode = 404;
return View();
}
}
和Web.Config 规则
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" />
</httpErrors>
【问题讨论】:
标签: unit-testing asp.net-mvc-4 httpcontext