Тестирование веб-сервиса ASMX с использованием NUnit и передача состояния сеанса - PullRequest
2 голосов
/ 21 апреля 2010

У меня есть тестовый класс NUnit, который запускает веб-службу ASP.NET (с использованием Microsoft.VisualStudio.WebHost.Server), которая работает на http://localhost:1070

Проблема, с которой я столкнулся, заключается в том, что я хочу создать состояние сеанса в тесте NUnit, доступном веб-службе ASP.NET на локальном хосте: 1070.
Я сделал следующее, и состояние сеанса может быть успешно создано внутри теста NUnit, но потеряно при вызове веб-службы:

//Create a new HttpContext for NUnit Testing based on:
//http://blogs.imeta.co.uk/jallderidge/archive/2008/10/19/456.aspx
HttpContext.Current = new HttpContext(
    new HttpRequest("", "http://localhost:1070/", ""), new HttpResponse(
     new System.IO.StringWriter()));

//Create a new HttpContext.Current for NUnit Testing
System.Web.SessionState.SessionStateUtility.AddHttpSessionStateToContext(
 HttpContext.Current, new HttpSessionStateContainer("",
  new SessionStateItemCollection(),
  new HttpStaticObjectsCollection(), 20000, true,
  HttpCookieMode.UseCookies, SessionStateMode.Off, false));

HttpContext.Current.Session["UserName"] = "testUserName";
testwebService.testMethod(); 

Я хочу иметь возможность получить состояние сеанса, созданное в тесте NUnit для сеанса ["Имя пользователя"] в веб-службе ASP.NET:

[WebMethod(EnableSession=true)]
public int testMethod()
{
    string user; 

    if(Session["UserName"] != null)
    {
       user = (string)Session["UserName"];

      //Do some processing of the user
      //user is validated against with value stored in database
      return 1;
    }
    else
      return 0;
}

Файл web.config имеет следующую конфигурацию для конфигурации состояния сеанса и хотел бы продолжать использовать InProc, а не StateServer или SQLServer:

<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="20"/> 

1 Ответ

0 голосов
/ 21 апреля 2010

Вместо использования фактического класса HttpContext вы можете использовать HttpContextBase ., А затем смоделировать сеанс, ответ, запрос и т. Д.

...