【发布时间】:2010-05-27 14:41:24
【问题描述】:
这更像是一个征求意见的问题,因此可能没有“正确”的答案,但我欢迎您就为什么您的答案是“正确”的答案提出争论。
给定一个使用 Entity Framework 作为持久性引擎的 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 );
}
这是矫枉过正吗?我是否需要检查记录是否真的被删除(因为我已经有服务和存储库测试来验证这一点)?我应该在这里使用一个假的存储库还是仅仅模拟整个事情更有意义?
我正在查看的示例使用了这种做事模型,我只是复制了它,但我真的很愿意以“最佳实践”的方式做事。
谢谢。
【问题讨论】:
标签: asp.net-mvc unit-testing mocking repository