Я использую C#4.0, и мне нужен к модульному тесту сервис. Функция в сервисе возвращает путь, подобный переменной, которую я назвал ожидаемым, это - путь, который я ожидаю возвращать. Но когда я запускаю этот тест, я получаю ошибку что HttpContext. Текущий является ПУСТЫМ. То, что я могу сделать для устранения этой проблемы, таким образом, тест может быть, работало?
[TestMethod]
public void GetPathTest()
{
var expected = System.IO.Path.GetFullPath(HttpContext.Current.Server.MapPath("~/Certificates/"));
var path = _mockService.Setup(o => o.GetPath()).Returns(expected);
}
На данный момент я не могу найти свою полную оболочку для HttpContext, которую я использовал ранее, но на данный момент мы просто создаем контекст для пустого запроса и переходим оттуда, например:
SimpleWorkerRequest request = new SimpleWorkerRequest("","","", null, new StringWriter());
HttpContext context = new HttpContext(request);
Затем в инициализации модульного теста или в самом модульном тесте (перед созданием ожидаемого) вы можете установить текущий HttpContext следующим образом:
HttpContext.Current = context;
Затем просто конкретизируйте поддельный контекст и возможное поддельное состояние сеанса и т. Д. По мере необходимости.
(Edit: это все в VS2008, кстати, framework 3.5).
Вы можете попробовать посмотреть на атрибуты, созданные для модульного тестирования ASP.Net, например
[HostType("ASP.NET")]
По этой ссылке на MSDN довольно хорошо написано об этом
Я размещаю это для справки. Это не простое решение, и в нем говорится о Duck Typing (если он крякнет...):
http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx
Это актуально и стоит прочитать; поскольку нет IHttpContext, невозможно создать реализацию тестовой среды - пока вы не рассмотрите возможность использования библиотеки Duck Typing здесь. Хотя это и не прямой ответ.
Надеюсь, это поможет.