Модульное тестирование контроллера с использованием специальной привязки модели

StackOverflow https://stackoverflow.com/questions/1689561

Вопрос

В моем приложении у меня есть пользовательская привязка модели, для которой я установил DefaultBinder в файле global.asax:

 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.Что я могу добавить в этот тест, чтобы гарантировать, что контроллер использует пользовательскую привязку модели?

Это было полезно?

Решение

Скотт Хансельман недавно сделал сообщение в блоге по этому поводу:

Разделение даты и времени — модульное тестирование привязок пользовательских моделей ASP.NET MVC

Та часть, которая вас заинтересует, находится внизу поста в разделе «Тестирование привязки пользовательской модели».По сути, вы создаете экземпляр ModelBindingContext, затем создаете экземпляр своего Modelbinder и вызываете Bind() в своем Modelbinder, передавая созданный вами ModelBindingContext (и контекст контроллера, если требуется).

Вот еще один вопрос в SO, который также содержит необходимую вам информацию (даже если вы не используете Moq):

Как провести модульное тестирование пользовательского ModelBinder с использованием Moq?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top