2013-12-14 2 views
1

너무 많은 세그먼트로 테스트 경로를 테스트하는 유닛 테스트가 있지만 테스트 코드는 Response Status Code (404 코드를 반환해야 함)까지 확장하고 싶습니다.유닛 테스팅 MVC4 응답 상태 코드

조롱당한 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); 
     } 

"404"보기와 적절한 Response Status Code 돌아 ErrorController 사용 :

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> 

답변

0

단원 표시 테스트 (404) 로 설정된 것 HttpStatusCode를 확인하는 것보다 질문에있는대로 Controller의 Action에 설정해야합니다. Web.config가 상호 작용할 것으로 예상된다면 웹 통합 테스트와 관련이 있습니다. 이는 완전히 다른 테스트입니다.

[TestMethod] 
public void RouteWithTooManySegments() 
{ 
    var httpContextStub = new Mock<HttpContextBase>(); 
    var httpResponseMock = new Mock<HttpResponseBase>(); 
    var controllerContextStub = new Mock<ControllerContext>(); 

    httpContextStub.Setup(x => x.Response).Returns(httpResponseMock.Object); 
    controllerContextStub.Setup(x => x.HttpContext) 
     .Returns(httpContextStub.Object); 

    var sut = new ErrorController 
     { ControllerContext = controllerContextStub.Object }; 

    sut.NotFound(); 

    httpResponseMock.VerifySet(x => x.StatusCode = 404); 
} 
+0

예 웹 통합 테스트의 방향에 대해 더 많이 생각하고있었습니다. – netdis