문제

내 응용 프로그램에는 Global.asax의 DefaultBinder로 설정 한 사용자 정의 모델 바인더가 있습니다.

 ModelBinders.Binders.DefaultBinder = new XLDataAnnotationsModelBinder();

컨트롤러에 대한 단위 테스트를 작성할 때 컨트롤러가 사용자 정의 모델 바인더를 사용해야하지만이 작업을 수행하는 방법을 모르겠습니다.

내 시험은 다음과 같습니다.

 [Test]
 public void Details_Post_Action_Fails_To_Change_Email_Address_With_Duplicate()
 {
     // Setup
     var controller = new AccountController();
     controller.SetFakeControllerContext();

     var param = Customer.Load(30005);
     param.EmailAddress = "foo@bar.com";

     // Test
     var result = controller.Details(param);

     // Assert
     Assert.IsTrue(result is ViewResult);  // will be ViewResult if failed....
     Assert.IsFalse(((ViewResult)result).ViewData.ModelState.IsValid);
 }

이 장치 테스트를 사용하면 컨트롤러가 DefaultModelBinder를 사용하여 끝납니다. 컨트롤러가 사용자 정의 모델 바인더를 사용하도록하기 위해이 테스트를 추가 할 수 있습니까?

도움이 되었습니까?

해결책

Scott Hanselman은 얼마 전에 이와 관련된 블로그 게시물을 만들었습니다.

DateTime 분할 - 단위 테스트 ASP.NET MVC 사용자 정의 모델 바인더

귀하가 관심을 갖는 부분은 "사용자 정의 모델 바인더 테스트"아래 게시물의 맨 아래에 있습니다. 기본적으로 ModelBindingContext를 인스턴스화 한 다음 ModelBinderText (필요한 경우 컨트롤러 컨텍스트)에서 전달한 ModelBinder에서 ModelBinder를 인스턴스화하고 ModelBinder에서 Call Bind ()를 인스턴스화합니다.

다음은 필요한 정보가 포함되어있는 또 다른 질문입니다 (MOQ를 사용하지 않더라도).

MOQ를 사용하여 사용자 정의 모델 바인더를 테스트하는 방법은 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top