单元测试MVC4中的HttpStatusCode'System.NullReferenceException'

时间:2013-08-06 14:24:07

标签: unit-testing asp.net-mvc-4 nunit moq

我正在尝试在MVC4中对HttpStatusCodes进行单元测试,但是当控制器尝试在Response上设置状态代码时,我一直得到'System.NullReferenceException',这在直接调用操作时是有意义的。我不能为我的生活解决如何在没有成为集成测试的情况下做到这一点。有人必须这样做,任何想法?请参阅下面的现有代码。

控制器

public ActionResult Index()
{
    Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
    Response.Headers.Add("Retry-After", "120");

    return View();
}

测试

[Test]
public void IndexActionShouldReturn503StatusCode()
{
    //Given
    var controller = new HomeController();

    //When
    var result = controller.Index() as HttpStatusCodeResult;

    //Then
    result.StatusCode.Should().Be((int)HttpStatusCode.ServiceUnavailable);
}

注意 要求是一个友好的“站点向下”页面,所以我需要返回一个视图和状态代码。

1 个答案:

答案 0 :(得分:2)

您正在返回ViewResult,然后尝试在单元测试中将其转换为HttpStatusCodeResult。尝试返回HttpStatusCodeResult而不是视图。

public ActionResult Index()
{
    Response.Headers.Add("Retry-After", "120");
    return new HttpStatusCodeResult(HttpStatusCode.ServiceUnavailable);
}