我正在尝试在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);
}
注意 要求是一个友好的“站点向下”页面,所以我需要返回一个视图和状态代码。
答案 0 :(得分:2)
您正在返回ViewResult
,然后尝试在单元测试中将其转换为HttpStatusCodeResult
。尝试返回HttpStatusCodeResult
而不是视图。
public ActionResult Index()
{
Response.Headers.Add("Retry-After", "120");
return new HttpStatusCodeResult(HttpStatusCode.ServiceUnavailable);
}