小编Nis*_*san的帖子

如何在ASP.Net MVC中模拟Controller上的请求?

我使用ASP.Net MVC框架在C#中有一个控制器

public class HomeController:Controller{
  public ActionResult Index()
    {
      if (Request.IsAjaxRequest())
        { 
          //do some ajaxy stuff
        }
      return View("Index");
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了一些关于模拟的技巧,并希望用以下和RhinoMocks测试代码

var mocks = new MockRepository();
var mockedhttpContext = mocks.DynamicMock<HttpContextBase>();
var mockedHttpRequest = mocks.DynamicMock<HttpRequestBase>();
SetupResult.For(mockedhttpContext.Request).Return(mockedHttpRequest);

var controller = new HomeController();
controller.ControllerContext = new ControllerContext(mockedhttpContext, new RouteData(), controller);
var result = controller.Index() as ViewResult;
Assert.AreEqual("About", result.ViewName);
Run Code Online (Sandbox Code Playgroud)

但是我一直收到这个错误:

异常System.ArgumentNullException:System.ArgumentNullException:值不能为null.参数名称:System.Web.Mvc.AjaxRequestExtensions.IsAjaxRequest(HttpRequestBase请求)中的请求

由于Request控制器上的对象没有setter.我尝试使用以下答案中的推荐代码使此测试正常工作.

这使用了Moq而不是RhinoMocks,并且在使用Moq时我使用以下内容进行相同的测试:

var request = new Mock<HttpRequestBase>();
// Not working - IsAjaxRequest() is static extension method and cannot be mocked …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc unit-testing rhino-mocks moq mocking

169
推荐指数
6
解决办法
8万
查看次数

标签 统计

asp.net-mvc ×1

mocking ×1

moq ×1

rhino-mocks ×1

unit-testing ×1