【问题标题】:Response.StatusCode is null in nunit testingResponse.StatusCode 在 nunit 测试中为空
【发布时间】:2013-01-03 07:22:13
【问题描述】:

我正在编写单元测试用例。我正在尝试为此方法编写单元测试,但显示错误。如何在 mvc3 框架和 rhino mock 中对该方法进行单元测试。

        public ActionResult UnderConstruction()
    {
        Response.StatusCode = (int)HttpStatusCode.TemporaryRedirect;
        ErrorModel model = new ErrorModel()
        {
            ErrorMessage = "This page is still under construction; please check back later.",
            Title = "Under Construction"
        };
        return View("Error", model);
    }

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 nunit response


    【解决方案1】:

    Response 为空,而不是 Response.StatusCode。您需要模拟HttpContextBaseHttpResponseBase,然后创建并分配控制器的ControllerContext

    测试看起来像这样(对不起,如果我捏造了 Rhino Mock 代码;我通常使用 Moq):

    // arrange
    var httpContext = MockRepository.GenerateMock<HttpContextBase>();
    var request = MockRepository.GenerateMock<HttpRequestBase>();
    var response = MockRepository.GenerateMock<HttpResponseBase>();
    
    // stub both Request and Response, for good measure.
    httpContext.Stub(x => x.Request).Return(request);
    httpContext.Stub(x => x.Response).Return(response);           
    
    var controller = new YourController();
    
    // create and assign the controller context
    var context = new ControllerContext(httpContext, 
                      new RouteData(), 
                      controller);
    controller.ControllerContext = context;
    
    // act
    var actual = controller.UnderConstruction() as ViewResultBase;
    
    // assert
    Assert.That(actual, Is.Not.Null);
    Assert.That(controller.Response.StatusCode, Is.EqualTo(HttpStatusCode.TemporaryRedirect));
    // etc.    
    

    【讨论】:

      猜你喜欢
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多