На другой ноте. Вы должны на самом деле проверить, что возвращает контроллер, и что возвращенный ActionResult - это то, что вы ожидаете. Тестирование ModelBinder должно быть сделано отдельно.
Допустим, вы хотите переключиться на привязку пользовательской модели. Вы можете повторно использовать тесты ModelBinder для нового ModelBinder, который вы создаете. Если ваши бизнес-правила остаются прежними, вы сможете напрямую использовать одни и те же тесты. Однако, если вы смешаете тесты Controller и ModelBinder, и тест не пройден, вы не знаете, в чем проблема - в Controller или ModelBinder.
Допустим, вы тестировали привязку вашей модели примерно так:
[Test]
public void Date_Can_Be_Pulled_Via_Provided_Month_Day_Year()
{
// Arrange
var formCollection = new NameValueCollection {
{ "foo.month", "2" },
{ "foo.day", "12" },
{ "foo.year", "1964" }
};
var valueProvider = new NameValueCollectionValueProvider(formCollection, null);
var modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(FwpUser));
var bindingContext = new ModelBindingContext
{
ModelName = "foo",
ValueProvider = valueProvider,
ModelMetadata = modelMetadata
};
DateAndTimeModelBinder b = new DateAndTimeModelBinder { Month = "month", Day = "day", Year = "year" };
ControllerContext controllerContext = new ControllerContext();
// Act
DateTime result = (DateTime)b.BindModel(controllerContext, bindingContext);
// Assert
Assert.AreEqual(DateTime.Parse("1964-02-12 12:00:00 am"), result);
}
Теперь, когда вы ЗНАЕТЕ, что ваша модель привязана правильно, вы можете продолжить тестирование Модели с вашим контроллером в отдельном тесте, чтобы проверить, вернет ли он вам правильный результат. Кроме того, вы можете использовать значения связанной модели для проверки ваших атрибутов валидации.
Таким образом, вы можете получить полный набор тестов, которые покажут, если ваше приложение взорвется, на каком уровне оно это делает. Привязка модели, контроллер или проверка.