Я пробираюсь через отличный пост Скотта Гатри на ASP.NET MVC Beta 1 . В нем он показывает улучшения, внесенные в метод UpdateModel, и как они улучшают юнит-тестирование. Я воссоздал аналогичный проект, однако каждый раз, когда я запускаю UnitTest, который содержит вызов UpdateModel, я получаю ArgumentNullException с именем controllerContext.
Вот соответствующие биты, начиная с моей модели:
public class Country {
public Int32 ID { get; set; }
public String Name { get; set; }
public String Iso3166 { get; set; }
}
Действие контроллера:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Int32 id, FormCollection form)
{
using ( ModelBindingDataContext db = new ModelBindingDataContext() ) {
Country country = db.Countries.Where(c => c.CountryID == id).SingleOrDefault();
try {
UpdateModel(country, form);
db.SubmitChanges();
return RedirectToAction("Index");
}
catch {
return View(country);
}
}
}
И, наконец, мой модульный тест не пройден:
[TestMethod]
public void Edit()
{
CountryController controller = new CountryController();
FormCollection form = new FormCollection();
form.Add("Name", "Canada");
form.Add("Iso3166", "CA");
var result = controller.Edit(2 /*Canada*/, form) as RedirectToRouteResult;
Assert.IsNotNull(result, "Expected to be redirected on successful POST.");
Assert.AreEqual("Show", result.RouteName, "Expected to redirect to the View action.");
}
ArgumentNullException
вызывается вызовом UpdateModel
с сообщением «Значение не может быть нулевым. Имя параметра: controllerContext». Я предполагаю, что где-то UpdateModel
требует System.Web.Mvc.ControllerContext
, которого нет во время выполнения теста.
Я также предполагаю, что где-то делаю что-то не так, и мне просто нужно указать в правильном направлении.
Помогите пожалуйста!