【发布时间】:2010-03-13 22:00:35
【问题描述】:
我有一个控制器,它在实体上实现简单的添加操作并重定向到详细信息页面:
[HttpPost]
public ActionResult Add(Thing thing)
{
// ... do validation, db stuff ...
return this.RedirectToAction<c => c.Details(thing.Id));
}
这很好用(使用 MvcContrib 程序集中的 RedirectToAction)。
当我对这个方法进行单元测试时,我想访问从 Details 操作返回的 ViewData(这样我就可以获取新插入的东西的主键并证明它现在在数据库中)。
测试有:
var result = controller.Add(thing);
但这里的结果类型为:System.Web.Mvc.RedirectToRouteResult(即System.Web.Mvc.ActionResult)。它还没有执行 Details 方法。
我尝试在返回的对象上调用 ExecuteResult,传入模拟的 ControllerContext,但框架对模拟对象中缺少细节感到不满意。
我可以尝试填写详细信息等,但是我的测试代码比我正在测试的代码要长得多,我觉得我需要对单元测试进行单元测试!
我是否在测试理念中遗漏了什么?当我无法返回其返回状态时,如何测试此操作?
【问题讨论】: