Я видел много похожих тем, но не тот, который действительно затрагивает мою конкретную ситуацию.Mocking HttpRequest в ASP.NET 4.0
Я пишу модульные тесты в веб-приложении ASP.NET 4.0 (ASP.NET Forms, а не MVC). В коде есть несколько точек, где я вызываю коллекцию ServerVariables
для вызова переменных, таких как REMOTE_ADDR
. Так как мои тесты блок не на самом деле инициировать HttpRequests
при выполнении моего кода, такие вещи, как ServerVariables
являются Null
и, следовательно, сообщение об ошибке при попытке вызова HttpContext.Current.Request.ServerVariables("REMOTE_ADDR")
Все решения я нашел для решения этой проблемы обратитесь к MVC и поэтому они предполагают что HttpRequest
происходит от HttpRequestBase
, что он делает в MVC, но не в формах ASP.NET.
Я пробовал использовать Moq
, но вы не можете издеваться над закрытым классом, и HttpRequest
, к сожалению, не имеет интерфейса.
Спасибо! Я немного колебался, чтобы изменить код в реальном времени. Живой код в настоящее время стабилен и очень сложный, но был построен без единой модульной системы тестирования. Я пытаюсь постепенно вводить модульное тестирование в микс с новой функцией, которую я добавляю. Я волнуюсь, что модульное тестирование будет сложно продать остальной части моей команды, если мне придется изменить стабильный код, чтобы он соответствовал модульным тестам, - хотя в тестовой разработке он был бы написан таким образом с самого начала. – Adam
+1 за хороший ответ. Я все еще могу пойти по этой дороге. – Adam
В итоге я пошел другим путем и использовал WatiN для модульного тестирования. WatiN проверяет его на уровне пользовательского интерфейса и поэтому не нужно издеваться над HttpRequest. Спасибо за вашу помощь. Я все равно отмечаю ваш ответ, потому что он действительно ответил на вопрос независимо от того, направлено ли я на это. – Adam