我正在使用MvcContrib和TestControllerBuilder为我的控制器编写测试。
我正在编写我的错误处理控制器的测试,如下所示:
public JsonResult HttpError()
{
Exception ex = null;
try
{
ex = (Exception)HttpContext.Application[Request.UserHostAddress.ToString()];
}
catch
{
}
if( ex != null )
{
return Json( new ErrorViewModel() { Message = ex.Message, Source = ex.Source, StackTrace = ex.StackTrace, Type = ex.GetType().Name}, JsonRequestBehavior.AllowGet );
}
else
{
return Json( new ErrorViewModel() { Message = "An error has occured." }, JsonRequestBehavior.AllowGet );
}
}
基本上,我的全局错误处理将最后一个异常放入Application存储中,并且此控制器尝试将其拉回,将其转换为Json,然后返回它(我们将所有内容作为Json返回,因为这些方法仅被调用为网络服务)。
为了对此进行全面测试,我需要UserHostAddress包含可预测的内容,但TestControllerBuilder设置的对象会将该属性保留为null。
我该如何使这项工作?我不确定如何在我的测试中完成这项工作。
答案 0 :(得分:4)
TestControllerBuilder使用Rhino.Mocks来模拟HttpContext。知道这一点,你可以将Request对象放回“记录”模式并找出响应:
controller.Request.BackToRecord();
controller.Request.Stub(r => r.UserHostAddress).Return("75.142.12.45");
controller.Request.Replay();
在初始化控制器之后但在方法调用之前执行此操作。