次のコントローラーメソッドがあります
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
}
}
しかし、単体テストから Create メソッドを呼び出すと、TryValidateModel が controllerContext を想定しているため失敗します。
Value cannot be null.Parameter name: controllerContext
この問題を解決する最善の方法は何ですか? MvcContrib TestHelper などで controllerContext を作成する必要がありますか?