2009-04-09 15 views
3

Ich muss Unit-Test diese Methode. Ich benutze moq als mein spöttisches Framework, wenn das hilft.Wie kann ich diese Methode testen?

[AcceptVerbs(HttpVerbs.Get)] 
public RedirectToRouteResult LogOff() 
{ 
    FormsAuthentication.SignOut(); 
    return RedirectToAction("Index", "Post"); 
} 

cheers :)

EDIT: Es war vor allem die FormsAuthentication Ich frage mich. Soll ich das überhaupt testen? Ich nehme an, ich müsste eine Identität mockern und dann überprüfen, ob IsAuthenticated falsch ist?

Antwort

2

So machen Sie das mit Moq. Vorausgesetzt, dass Sie ein IFormsAuthentication als Wrapper erstellt haben:

[Test] 
public void LogOffSignsUserOut() 
{ 
    var controller = new MyController(); 
    var authMock = new Mock<IFormsAuthentication>(); 
    controller.Authentication = authMock.Object; //inject your mock 

    controller.LogOff() 

    authMock.Verify(x=>x.SignOff(), Times.Once()); 
} 
4

könnten Sie einen Wrapper für FormsAuthentication erstellen und Stub

formsAuthentication = mockery.Stub<IFormsAuthentication>(); 

und etwas tun.

With.Mocks(mockery) 
    .Expecting(() => Expect.Call(() => formsAuthentication.SignOut())) 
    .Verify(() => controller.LogOff()); 

/* Asserts to go here */ 

In Bezug auf das Testen der FormsAuthentication. Testen Sie dies woanders, Trennung von Sorgen und all das.

Der Test für diese Aktion muss nur überprüfen, dass die SignOut-Methode aufgerufen wurde und ob die Weiterleitung stattgefunden hat. Denken Sie daran, dass Sie die Aktion testen, nicht die Methoden innerhalb der Aktion. Sie würden die Arbeit des Datenspeichers nicht in einer Übermittlungsaktion testen, Sie würden sich über all das lustig machen.

+0

so ... sollte gesagt haben, dass mit Rhino Mocks gemacht wird ..... aber das Prinzip ist genau das gleiche –

+0

verdammt. Ich kann einfach nicht herausfinden, wie dies mit MOQ zu tun :( –

+0

Entschuldigung kann Ihnen nicht helfen, da ich überhaupt keine Erfahrung mit MOQ habe. –

Verwandte Themen