2009-07-14 13 views
3

ich eine Controller-Aktion, die überprüftUnit-Tests eine Asp.net MVC-Controller Aktion

this.User.Identity.IsAuthenticated 

Was schlagen Sie vor, wie Unit-Test auf eine solche Aktion in Angriff zu nehmen?

+0

Genau die gleiche Frage: http://stackoverflow.com/questions/1106398/how-to-unit-test-an-mvc-controller-action-which-depend-on-authentification-in-c –

+0

danke eugene ... habe es vorher nicht gefunden ... –

Antwort

5

Ich würde vorschlagen, die IsAuthenticated-Eigenschaft zu verspotten. Es gibt eine Reihe von anderen Posts über SO, Sie könnten nach ihnen suchen. Hier

ist ein Beispiel für die Anfrage spöttischen Moq mit:

var mockRequest = new Mock<HttpRequestBase>(); 
mockRequest.Setup(x => x.IsAuthenticated).Returns(true); 

var mockContext = new Mock<ControllerContext>(); 
mockContext.Setup(x => x.Request).Returns(mockRequest.Object); 

var myController = new MyController(); 
myController.ControllerContext = new ControllerContext(mockContext.Object, new RouteData(), myController); 

Ich würde sehr in Scott Hanselman allgegenwärtig "MvcMockHelpers" Code empfehlen suchen, das ist, was ich benutze:

http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx

+0

Aber h Würdest du deinen verspotteten HttpContext/Request injizieren? Die Benutzereigenschaft ist Teil der Controller-Klasse und hat ihren eigenen Code, den ich nicht beeinflussen kann. –

+0

Ok. Jetzt hat dein Code die Antwort. Die ControllerContext-Eigenschaft, die mir nicht bekannt war. Vielen Dank. –

+0

In Moq verwenden Sie SetupGet für Mocking-Eigenschaften (Setup ist nur für Mock Methoden) –

Verwandte Themen