유닛 테스트 사용자 정의 모델 바인더로 컨트롤러
-
18-09-2019 - |
문제
내 응용 프로그램에는 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를 사용하지 않더라도).
제휴하지 않습니다 StackOverflow