2009-11-30 3 views
3

내 컨트롤러가 작업 메서드 논리에 따라 다른보기를 반환 할 수 있습니다. 조치 메소드 '작성'은 서비스에 몇 가지 유효성 검증 및 지속성을 요청합니다. 유효성 검사가 실패하면 action 메소드는 동일한 'Create'뷰를 반환합니다. 유효성 검사 및 저장이 정상적으로 실행되면 작업 메서드는 '인덱스'뷰 (RedirectToAction)를 반환합니다.ASP.NET MVC - 작업 메서드 논리에 따라 다른보기를 반환하는 컨트롤러를 테스트하십시오.

return View("Create", data); 

난 단지 때문에 시험의 뷰 이름을 하드 코딩 wan't하지 않지만 알아낼 수 없습니다 : 나는 다음과 같이 명시 적으로 뷰 이름을 제공하는 경우에만 뷰 이름을 얻는 것이 가능하다는 것을 알고있다 반환 된 뷰를 찾는 방법. 액션 메소드 로직에 따라 리턴 된 뷰를 테스트 할 수있는 깔끔하고 우아한 방법이 있습니까?

BTW, 여기 내 테스트 코드 ..

[TestMethod] 
     public void Create_Post_Should_Return_Create_View_When_Saving_Invalid_Court() { 
      var courtServiceMock = new Mock<ICourtService>(); 
      var userServiceMock = new Mock<IUserService>(); 
      courtServiceMock.Setup(x => x.Add(It.IsAny<CourtInfo>())).Returns((int?)null); 
      userServiceMock.Setup(x => x.Get(It.IsAny<string>(), It.IsAny<UserLoadOptions>())).Returns(new UserInfo { Id = 1 }); 
      var controller = new CourtsController(courtServiceMock.Object, userServiceMock.Object); 
      var controllerContextMock = new Mock<ControllerContext>(); 
      controllerContextMock.SetupGet(x => x.HttpContext.User.Identity.Name).Returns("admin"); 
      controller.ControllerContext = controllerContextMock.Object; 
      var view = controller.Create(new CourtInfo()) as ViewResult; 
      Assert.IsTrue(view.ViewName == "Create"); //this line is not working 
     } 

답변

4

당신은 오히려 뷰의 이름이 아닌 결과의 유형을 테스트해야합니다. 리디렉션하는 경우 결과는 ViewResult이 아닙니다.

// setup for success 
var result = controller.Create(new CourtInfo()); 

Assert.IsInstanceOfType(result, typeof(ViewResult)); 

오류 테스트 :

// setup for error 
var result = controller.Create(new CourtInfo()); 

Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult)); 
오류의 경우 RedirectToAction을 반환하는 경우

, 다음과 같은 테스트를 할 것

관련 문제