2010-07-13 2 views
13

Я использую C# 4.0, и мне нужно выполнить тестирование службы. Функция внутри службы возвращает путь, похожий на переменную i, называемую ожидаемой, это путь, который я ожидаю вернуться. Но когда я запускаю этот тест, я получаю ошибку, что HttpContext.Current - NULL. Что я могу сделать, чтобы исправить эту проблему, чтобы тест можно запустить?Использование 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); 
} 

ответ

17

На данный момент я могу 't найти мою полную оболочку для HttpContext, которую я использовал ранее, но на данный момент мы просто создаем контекст для пустого запроса и идем оттуда, например:

SimpleWorkerRequest request = new SimpleWorkerRequest("","","", null, new StringWriter()); 
HttpContext context = new HttpContext(request); 

Затем в тестовом модуле инициализации или в самом тестовом модуле (прежде чем создавать ожидаемый) в вы можете установить текущий HttpContext следующим образом:

HttpContext.Current = context; 

Тогда просто конкретизации поддельный контекст и возможные поддельные sessionstate, и т.д. как требуется.

(Редактировать: Это все в VS2008, рамки 3.5 кстати).

+0

Благодарим за отзыв! Это сделало это, хотя я немного изменил простой workerrequest, добавив правильный путь и адреса. – Rob

2

Вы можете попробовать глядя на атрибутах, созданные для модульного тестирования ASP.Net, как

[HostType("ASP.NET")] 

Это link to MSDN имеет довольно хорошую рецензию об этом

1

Я отправляю это для справки. Это не простое решение, и говорит о Duck Typing (если он крякает ..):

http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx

http://haacked.com/archive/2007/09/09/ihttpcontext-and-other-interfaces-for-your-duck-typing-benefit.aspx

Это отношение и стоит читать; потому что нет IHttpContext, невозможно создать реализацию тестовой среды - пока вы не рассмотрите возможность использования библиотеки Duck Typing. Хотя это не прямой ответ.

Надеюсь, что это поможет.

2

Вы можете украсить свой метод испытания с Подписками атрибуты:

[TestMethod] 
[HostType("ASP.NET")] 
[UrlToTest("http://localhost:xxxx/")] 
[AspNetDevelopmentServerHost("$(SolutionDir)\\xxx\\", "/")] 
public void TestMethod() 
{ 
    ... 
} 

Затем добавить файл Default.aspx в тестовом модуль Proj.

Внутри метода тестирования вы можете легко получить доступ к HttpContext. Если вы хотите отладить, вы можете использовать некоторые следы или прервать выполнение отладки с System.Diagnostics.Debugger.Break команд()

public void TestMethod() 
{ 
    System.Diagnostics.Debugger.Break(); 

    ... 
} 

, а затем присоединение отладчика к процессу, как объяснено MSDN: https://msdn.microsoft.com/en-us/library/vstudio/c6wf8e4z(v=vs.100).aspx