Короткая версия:
Если я создаю System.Web.HttpException
следующим образом:
var exception = new HttpException(403, "Forbidden");
Я ожидал бы, что следующие методы вернут эти значения, но они этого не делают:
var code = exception.GetHttpCode(); // is 0
var msg = exception.GetHtmlErrorMessage(); // is: null
Редактировать: Фактически GetHttpCode()
возвращает правильный номер при вызове в первый раз, но возвращает 0
при вызове во второй раз:
var code = exception.GetHttpCode(); // is 403
code = exception.GetHttpCode(); // is 0
Длинная версия:
Я пытаюсь выполнить модульное тестирование метода обработки глобальных исключений ASP.NET "Application_Error". Это выдержка из кода:
var httpException = server.GetLastError() as HttpException;
if (httpException != null)
{
response.StatusCode = httpException.GetHttpCode();
response.StatusDescription = httpException.GetHtmlErrorMessage();
// ...
В модульном тесте этот метод вызывается с фиктивным ServerUtilityBase
объектом (Moq), который возвращает HttpException
при вызове server.GetLastError()
:
var exception = new HttpException(403, "Forbidden");
serverMock.Setup(server => server.GetLastError()).Returns(exception);
// ...
К сожалению, мне пришлось выяснить, что в коде обработки ошибок методы httpException.GetHttpCode()
и httpException.GetHtmlErrorMessage()
возвращают 0
или null
соответственно.
Что нужно сделать, чтобы new HttpException(403, "Forbidden")
return 403
или "Forbidden"
при вызове этих методов?
К сожалению, невозможно создать Mock исключения, сделав его подклассом, потому что указанные методы запечатаны.