Я написал ErrorsController
, который, как вы можете себе представить, имеет довольно простые методы для продолжения обслуживания динамического содержимого в случае ошибки, например. 500.Тестирование результата HttpResponse.StatusCode
Теперь, что я хочу сделать, это проверить, что в этом методе HttpResponseBase.StatusCode
устанавливается при заданном числе при выполнении этого метода, но по какой-либо причине свойство StatusCode
всегда равно 0. Это включает в себя при непосредственном изучении свойства после установки.
Контроллер
public ViewResult NotFound()
{
Response.StatusCode = (int)HttpStatusCode.NotFound;
const string PageTitle = "404 Page Not Found";
var viewModel = this.GetViewModel(PageTitle);
return this.View(viewModel);
}
GetViewModel
ничего не делает, кроме настройки свойств на модели представления
Test
[SetUp]
public void Setup()
{
this.httpContext = new Mock<HttpContextBase>();
this.httpResponse = new Mock<HttpResponseBase>();
this.httpContext.SetupGet(x => x.Response).Returns(this.httpResponse.Object);
this.requestContext = new RequestContext(this.httpContext.Object, new RouteData());
this.controller = new ErrorsController(this.contentRepository.Object);
this.controllerContext = new Mock<ControllerContext>(this.requestContext, this.controller);
this.controllerContext.SetupGet(x => x.HttpContext.Response).Returns(this.httpResponse.Object);
this.controller.ControllerContext = this.controllerContext.Object;
}
[Test]
public void Should_ReturnCorrectStatusCode_ForNotFoundAction()
{
this.controller.NotFound();
this.httpResponse.VerifySet(x => x.StatusCode = (int)HttpStatusCode.NotFound);
Assert.AreEqual((int)HttpStatusCode.NotFound, this.httpResponse.StatusCode);
}
Где я буду здесь не так?
@NikolaiDante Не могли бы вы уточнить? Я только начинаю использовать тестирование – ediblecode
Вызывая метод на вашем ручном инстанцированном контроллере, вы обходите весь HTTP-стек. Контекст вашего контроллера, HTTP-контекст и HTTP-ответ не используются, вы должны проверить «ViewResult», возвращаемый контроллером. – CodeCaster
@CodeCaster Это не может быть правдой. Раньше (до смешения ответа/контекста). Я получаю нулевую ошибку в методе, заявляя, что 'Response' равно null. Я также вижу через отладку, что 'Response' - мой издеваемый объект (очень готов ошибаться в этом) – ediblecode