2017-01-16 1 views
0

Während ich meine Komponententestmethode ausführe, erhalte ich Nullwerte in Instanz von HttpSessionStateBase. Ich habe die Httpcontext wie diese NULL in HttpSessionStateBase erhalten C# Komponententest

verspottet
var httpRequest = new HttpRequest("", "http://localhost/", ""); 
var stringWriter = new StringWriter(); 
var httpResponse = new HttpResponse(stringWriter); 
var httpContext = new HttpContext(httpRequest, httpResponse); 
var sessionContainer = new HttpSessionStateContainer("id", 
                new SessionStateItemCollection(), 
                new HttpStaticObjectsCollection(), 
                10, 
                true, 
                HttpCookieMode.AutoDetect, 
                SessionStateMode.InProc, 
                false); 

SessionStateUtility.AddHttpSessionStateToContext(httpContext, sessionContainer); 

Bitte einige Ideen vorschlagen, einige Dummy-Werte in Httpsessionstatebase

+0

Was ist 'SessionStateUtility.AddHttpSessionStateToContext' und wo genau erhalten Sie Null-Werte? Zeigen Sie, wie Sie versuchen, auf das Session-Objekt im aktuellen Code zuzugreifen, den Sie testen möchten. –

+0

öffentliche ActionResult-Anmeldung (Kunden-Obj) {Session.Clear(); }, Diese Sitzung hat den Typ HttpSessionStateBase –

+0

var result = (RedirectToRouteResult) controller.Login (neuer Kunde() {AdminLogin = "admin", Password = "admin"}); –

Antwort

2

ist bekommen Lassen annehmen, dass Sie die folgenden Controller-Aktion haben, die Sie Unit-Test benötigen:

public class AccountController: Controller 
{ 
    public ActionResult Login(Customer obj) 
    { 
     Session.Clear(); 
     return View(); 
    } 
} 

und hier ist ein Beispiel Draht-up:

// arrange 
var httpRequest = new HttpRequest("", "http://localhost/", ""); 
var stringWriter = new StringWriter(); 
var httpResponse = new HttpResponse(stringWriter); 
var httpContext = new HttpContext(httpRequest, httpResponse); 
var sessionContainer = new HttpSessionStateContainer(
    "id", 
    new SessionStateItemCollection(), 
    new HttpStaticObjectsCollection(), 
    10, 
    true, 
    HttpCookieMode.AutoDetect, 
    SessionStateMode.InProc, 
    false); 
SessionStateUtility.AddHttpSessionStateToContext(httpContext, sessionContainer); 

var controller = new AccountController(); 
var requestContext = new RequestContext(new HttpContextWrapper(httpContext), new RouteData()); 
controller.ControllerContext = new ControllerContext(requestContext, controller); 

// act 
var actual = controller.Login(new Customer()); 

// assert 
... 

Hinweis dass Sie die controller.ControllerContext Eigenschaft auffüllen müssen, bevor Sie die Aktionen aufrufen.

+0

Große Hilfe. Vielen Dank variieren –

+0

Ich bekomme Fehler in dieser Zeile. FormsAuthentication.SignOut() –

+2

'FormsAuthentication.SignOut' ist intern von der statischen' HttpContext.Current' -Eigenschaft abhängig. Aus naheliegenden Gründen kann dies nicht außerhalb einer ASP.NET-Anwendung getestet werden. Ich empfehle Ihnen, solche hartkodierten Abhängigkeiten hinter einer Fassade zu abstrahieren und dann mit Ihrer Fassade im Controller zu arbeiten. Dies würde es Ihnen ermöglichen, Ihre Controller leicht isoliert von allen ASP.NET-spezifischen Kontexten zu testen. –