2010-04-21 2 views
2

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

Проблемы я имею что я хочу создать состояние сеанса в тесте NUnit, доступном веб-службе ASP.NET на localhost: 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 для сессии [ «UserName»] в веб-службы 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 Or SQLServer:

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

Я предпочитаю не использовать ложные объекты, поскольку веб-службы сильно привязаны к бэкэнд базы данных, а значения состояния сеанса проверяются на то, что хранится. – herbyme

ответ

0

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

+0

Проблема заключается в том, что состояние сеанса для «Username» (в данном случае) проверяется на значения, сохраняющиеся в базе данных в testMethod(). Я не уверен, будет ли работать с макетными объектами, так как это приведет к сбою процесса проверки базы данных, что приведет к сбою модульного теста. Проблема заключается в том, что состояние сеанса привязано к концу базы данных. – herbyme