Допустим, у меня есть этот модульный тест:
[Test]
public void LastNameShouldNotBeEmpty()
{
ExampleController controller = new ExampleController();
Person editedPerson = new Person { FirstName = "j", LastName = "" };
controller.EditPerson(editedPerson);
Assert.AreEqual(controller.ModelState.IsValid, false);
}
И этот код:
public class ExampleController : Controller
{
public ActionResult EditPerson(int personId)
{
// Serve up a view, whatever
return View(Person.LoadPerson(personId));
}
[HttpPost]
public ActionResult EditPerson(Person person)
{
if (ModelState.IsValid)
{
// TODO - actually save the modified person, whatever
}
return View(person);
}
}
public class Person
{
public string FirstName { get; set; }
[Required] public string LastName { get; set; }
}
Меня беспокоит, что если я TDD выдвинула требование, что LastName не может бытьпусто, я не могу выполнить тест с использованием атрибутов DataAnnotation ([Обязательный] до объявления LastName для Person), потому что, когда метод действия контроллера вызывается из модульного теста, инфраструктура MVC не имеет возможности применить проверкуэто происходит во время привязки модели.
(Если я вручную выполнил проверку в методе контроллера EditPerson и добавил ошибку в ModelState, это можно было бы проверить из модульного теста.)
Я что-то пропустил?Я хотел бы указать поведение моей системы для проверки с помощью модульных тестов, но я не уверен, как выполнить модульный тест, если только я полностью не откажусь от атрибутов DataAnnotation и не выполню проверку вручную в методах действия моего контроллера.
Я надеюсь, что цель моего вопроса ясна;Есть ли способ принудительно выполнить привязку истинной модели (включая ее поведение проверки, чтобы проверить, что я не забыл важные атрибуты проверки) из автоматического модульного теста?
Джефф