这是更多的意见寻求问题,所以可能没有“正确”的答案,但我会欢迎你为什么答案是“正确”的论点。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