自從我做任何MVC工作已經有一段時間了,所以我希望錯過一些東西。我試圖編寫測試和控制器操作來簡單地編輯名爲「Business」的DTO。基本MVC3單元測試失敗UpdateModel()
控制器動作:
[HttpPost]
public ActionResult Edit(string id, Business business)
{
try
{
var model = _businessRepository.Get(id);
if (model != null)
{
UpdateModel(model);
if (ModelState.IsValid)
{
_businessRepository.Save(model);
}
else
{
return View(business);
}
}
return RedirectToAction("Index");
}
catch
{
return View();
}
}
測試:
[TestMethod]
public void Edit_Post_Action_Updates_Model_And_Redirects()
{
// Arrange
var mockBusinessRepository = new Mock<IBusinessRepository>();
var model = new Business { Id = "1", Name = "Test" };
var expected = new Business { Id = "1", Name = "Not Test" };
// Set up result for business repository
mockBusinessRepository.Setup(m => m.Get(model.Id)).Returns(model);
mockBusinessRepository.Setup(m => m.Save(expected)).Returns(expected);
var businessController = new BusinessController(mockBusinessRepository.Object);
// Act
var result = businessController.Edit(model.Id, expected) as RedirectToRouteResult;
// Assert
Assert.IsNotNull(result);
Assert.AreEqual(result.RouteValues["action"], "Index");
mockBusinessRepository.VerifyAll();
}
,它是給對異常的線,是在控制器中的UpdateModel()。異常細節:
「值不能爲空參數名:controllerContext」
有什麼在模型中,當你調用save方法?模型的代碼是什麼? – Brian 2012-04-11 12:59:13
沒有'UpdateModel()'的代碼很難說,但我的猜測*是它依賴於不是由你的單元測試構造的數據庫上下文。 – GalacticCowboy 2012-04-11 13:27:48
@Brian我從來沒有去過Save方法,因爲它在UpdateModel上死了。但模型只是2個字符串:Id和Name。 – mandreko 2012-04-11 14:31:06