2008-11-17 7 views
5

Ich versuche, eine Seite in meiner ASP.NET MVC-Anwendung zu testen, die bei der Veröffentlichung einen Benutzereintrag löscht. Ich möchte diese Seite so einschränken, dass sie nur vom Eigentümer des Artikels gepostet werden kann. Ursprünglich wollte ich nur einen kurzen Check in den Controller, der überprüft, ob der HttpContext.Current.User.Identity.Name ist gleich dem Besitzer des Elements, aber ich erkannte schnell, dass das Testen dieser Einheit wäre schwierig.Wie stempeln Sie User.Identity.Name in ASP.NET MVC aus?

Sollte ich eine Schnittstelle erstellen, die eine Möglichkeit bietet, auf den Namen des aktuell angemeldeten Benutzers zuzugreifen?

Antwort

4

Die letzte Zeile Ihrer Frage ist wahrscheinlich die schnellste Lösung, aber ich glaube nicht, dass Sie die Schnittstelle erstellen müssen, HttpContext.Current.User ist bereits ein IPrincipal und HttpContext.Current.User.Identity ist bereits ein IIdentity.

Wenn Ihre Prüflogik eine dieser Schnittstellen verwendet, kann der Controller einen IIdentity passieren spotten, die Sie anstelle der HttpContext.Current.User.Identity

Hoffnung schaffen, das hilft!

2

Ich verwende Thread.CurrentPrincipal.Identity.Name. Es ist trivial, ein GenericPrincipal für einen Komponententest zu erstellen und es anzuhängen.

5

Sie können diesen Code verwenden

Controller CreateControllerAs(string userName) { 

    var mock = new Mock<ControllerContext>(); 
    mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName); 
    mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true); 

    var controller = new SomeController(); 
    controller.ControllerContext = mock.Object; 

    return controller; 
} 

Es verwendet moq lib

+0

Wissen Sie, wo kann ich die Mock-Klasse finden? Ich habe überall nach MSDN gesucht, um nach Dokumenten zu suchen, habe aber keine Fortschritte gemacht. –

+1

https://code.google.com/p/moq/ Diese Bibliothek wird hier verwendet – Sly

Verwandte Themen