Wie kann ich eine Controller-Aktion testen, die die Variable Controller.User verwendet?

8

Ich habe eine Controller-Aktion, die automatisch auf eine neue Seite umleitet, wenn der Benutzer bereits angemeldet ist ( User.Identity.IsAuthenticated ). Was ist der beste Weg, um einen Komponententest für dieses Szenario zu schreiben, um sicherzustellen, dass die Weiterleitung stattfindet?

    
Jedidja 23.11.2009, 14:54
quelle

2 Antworten

14

Ich habe die folgenden Mocks mit Moq verwendet, um verschiedene Bedingungen in meinen Komponententests einzurichten. Zuerst der HttpContextBase-Mock:

%Vor%

Jede Eigenschaft, die einen nützlichen Mock bereitstellen könnte, wird hier eingerichtet. Auf diese Weise kann ich, wenn ich etwas wie einen Referrer hinzufügen muss, einfach folgendes verwenden:

%Vor%

Die Methode "GetPrincipleMock" richtet den Benutzer ein. Es sieht so aus:

%Vor%

Nun sehen meine Controller-Einstellungen in den Tests so aus:

%Vor%

Es ist ein bisschen ausführliche Konfiguration, aber sobald Sie alles an Ort und Stelle haben, wird das Testen einer Vielzahl von Bedingungen viel einfacher.

    
mkedobbs 23.11.2009, 16:47
quelle
7

Das ist nicht die einfachste Sache, aber es kann gemacht werden. Die Benutzereigenschaft delegiert einfach an Controller.HttpContext.User. Beide sind nicht virtuelle schreibgeschützte Eigenschaften, sodass Sie nichts dagegen tun können. Controller.HttpContext delegiert jedoch an ControllerBase.ControllerContext, eine beschreibbare Eigenschaft.

Daher können Sie Controller.ControllerContext eine Test Double HttpContextBase zuweisen, bevor Sie Ihr System unter Test (SUT) ausführen. Mit Moq würde es etwa so aussehen:

%Vor%

Rufen Sie dann Ihre Aktion auf und vergewissern Sie sich, dass das Rückgabeergebnis ein RedirectResult ist.

Dieser Test verwendet das implizite Wissen, dass beim Erstellen einer GenericIdentity mit einem leeren Namen für IsAuthenticated false zurückgegeben wird. Sie könnten erwägen, den Test expliziter zu machen, indem Sie stattdessen Mock<IIdentity> verwenden.

    
Mark Seemann 23.11.2009 15:09
quelle

Tags und Links