私は、 ASP.NET MVC Beta 1に関する Scott Guthrie の優れた投稿に取り組んできました。その中で彼は、UpdateModel メソッドに加えられた改善と、それによって単体テストがどのように改善されるかを示しています。同様のプロジェクトを再作成しましたが、UpdateModel への呼び出しを含む UnitTest を実行するたびに、controllerContext パラメーターを指定する ArgumentNullException を受け取ります。
私のモデルから始めて、関連するビットは次のとおりです。
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
への呼び出しによって、 「値を null にすることはできません。パラメータ名: controllerContext」というメッセージがスローされます。テストの実行中に存在しないUpdateModel
が必要な場所があると想定しています。System.Web.Mvc.ControllerContext
また、どこかで何か間違ったことをしていて、正しい方向に向ける必要があるだけだと思います。
助けてください!