【问题标题】:Setting Response.StatusCode using MvcContrib.TestHelpher使用 MvcContrib.TestHelpher 设置 Response.StatusCode
【发布时间】:2013-07-26 14:47:59
【问题描述】:

我有一个非常简单的测试方法,使用 MvcContrib.TestBuilder 设置控制器(并模拟 HttpContext 等...)

    [Test]
    public void http404_returns_status_code_of_404()
    {
        var builder = new TestControllerBuilder();
        controller = new ErrorController();

        builder.InitializeController(controller);

        var result = controller.Http404();

        Assert.That(controller.Response.StatusCode, Is.EqualTo(404));
    }

我的实现看起来很简单:

    public ActionResult Http404()
    {
        Response.StatusCode = 404;

        return View();
    }

但是,我的测试总是失败,因为Response.StatusCode 总是 0

即使我在Response.StatusCode = 404; 之后调试并评估Response.StatusCode,它仍然是0

【问题讨论】:

    标签: asp.net-mvc mvccontrib mvccontrib-testhelper


    【解决方案1】:

    HttpResponse 实例是一个模拟。所以你应该这样断言它:

    controller.Response.AssertWasCalled(x => x.StatusCode = 404);
    

    代替:

    Assert.That(controller.Response.StatusCode, Is.EqualTo(404));
    

    但我不会在我的控制器操作中设置一些状态代码,而是简单地返回正确的ActionResult

    public ActionResult Http404()
    {
        return new HttpNotFoundResult();
    }
    

    并像这样测试它:

    // arrange
    var builder = new TestControllerBuilder();
    var sut = new ErrorController();
    builder.InitializeController(sut);
    
    // act
    var actual = controller.Http404();
    
    // assert
    actual.AssertResultIs<HttpNotFoundResult>();
    

    恕我直言,看起来更具可读性。

    【讨论】:

      猜你喜欢
      • 2013-06-15
      • 2010-09-30
      • 2011-02-28
      • 2013-09-05
      • 2012-06-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多