這是更多的意見尋求問題,所以可能沒有「正確」的答案,但我會歡迎你爲什麼答案是「正確」的論點。ASP.NET MVC單元測試控制器 - 知識庫
由於使用實體框架的持久化引擎的MVC應用程序,存儲庫層,基本上推遲到倉庫服務層和控制器上的刪除方法,看起來像這樣:
public ActionResult Delete(State model)
{
try
{
if(model == null)
{
return View(model);
}
_stateService.Delete(model);
return RedirectToAction("Index");
}
catch
{
return View(model);
}
}
我正在尋找適當的方式來測試這個單元。目前,我有被在服務中使用的假倉庫,和我的單元測試是這樣的:
[TestMethod]
public void Delete_Post_Passes_With_State_4()
{
//Arrange
var stateService = GetService();
var stateController = new StateController(stateService);
ViewResult result = stateController.Delete(4) as ViewResult;
var model = (State)result.ViewData.Model;
//Act
RedirectToRouteResult redirectResult = stateController.Delete(model) as RedirectToRouteResult;
stateController = new StateController(stateService);
var newresult = stateController.Delete(4) as ViewResult;
var newmodel = (State)newresult.ViewData.Model;
//Assert
Assert.AreEqual(redirectResult.RouteValues["action"], "Index");
Assert.IsNull(newmodel);
}
這是大材小用?我是否需要檢查記錄是否真的被刪除(因爲我已經有Service和Repository測試驗證了這一點)?我是否應該在這裏使用虛假的存儲庫,或者只是爲了嘲笑整個事情會更有意義?
我看到的例子使用了這種模型,我只是複製了它,但我真的很樂意以「最佳實踐」的方式做事。
謝謝。
同意。如果此代碼正在測試控制器,則服務和存儲庫應該是假貨/存根。 – PatrickSteele 2010-05-27 15:16:01