【发布时间】:2015-10-16 05:31:43
【问题描述】:
以下是我要编写单元测试的代码sn-p:
[HttpGet]
public ActionResult Edit(string id)
{
if (Request.IsAjaxRequest())
{
EditModel model = new EditModel();
.....
}
return View();
}
我想为此操作编写单元测试,我可以将 Request.IsAjaxRequest() 的结果伪造为 true,以便我可以为操作的其余代码编写测试。
我已经尝试过,但它不起作用。 _request.Headers 始终为空,Request.IsAjaxRequest() 始终返回 false:
[Fact]
public void Get_Edit_AjaxRequest_ExpectedActionCalled()
{
HttpRequestBase _request = A.Fake<HttpRequestBase>();
_request.Headers.Add("X-Requested-With", "XMLHttpRequest");
_controller.ControllerContext = A.Fake<ControllerContext>();
_controller.ControllerContext.HttpContext = _request;
A.CallTo(() => _controller.Request).Returns(_request);
var result = _controller.Edit(1) as RedirectToRouteResult;
}
我总是把Request.IsAjaxRequest() 当作假的。对此非常感谢任何帮助。谢谢
【问题讨论】:
-
我正在尝试重现,但遇到了大问题。我不是 MVC 人,也许我的部分问题是我没有使用正确的版本(我使用的是 VS2013 附带的任何版本),但
_controller.ControllerContext.HttpContext = _request;无法编译(HttpRequesteBase不是RequestContext) 和_controller.Edit(1)无法编译,因为Edit需要string。你能指出我哪里出错了,或者解决这个问题,以便它至少可以编译吗?
标签: asp.net-mvc unit-testing fakeiteasy