У меня есть следующий метод контроллераMVC4 - TryValidateModel ломает модульные тесты
public ActionResult Create(Category category)
{
//default values
if (string.IsNullOrEmpty(category.GeoAreaLevelIdentifier))
{
category.GeoAreaLevelIdentifier = "OutputArea";
}
category.CreatorIdentifier = EsdContext.User.UniqueIdentifier.ToString();
category.Created = DateTime.Now;
//validation
RevalidateModel(category);
new CategoryBroker().Create(category);
return JsonNow(category);
}
, который заполняет некоторые значения по умолчанию в модели, а затем проверяет его. Это связано с тем, что клиентскому коду разрешается отправлять модель без некоторых необходимых полей. Недостающие поля заполняются контроллером (см. Выше).
метод RevalidateModel называет TryValidateModel:
protected void RevalidateModel(object model)
{
ModelState.Clear();
TryValidateModel(model); //called explicitly since model has been updated
if (!ModelState.IsValid)
{
//error message
}
}
Но когда я звоню Создать метод из модульного тестирования, он терпит неудачу, потому что TryValidateModel ожидает controllerContext:
Value cannot be null.Parameter name: controllerContext
Что это лучший способ решить эту проблему ? Должен ли я создать файл ControlContext, например, с помощью MvcContrib TestHelper?
Да, вам нужно высмеять контекст контроллера, чтобы вызвать этот метод из модульного теста. – mayabelle
@mayabelle «вам нужно высмеять контекст контроллера» - знаете ли вы, как это сделать? Вы пробовали MvcContrib.TestHelper? –
http://stackoverflow.com/questions/332060/how-do-i-unit-test-actions-without-mocking-that-use-updatemodel – stuartdotnet