2009-04-09 8 views
3

Je dois tester cette méthode unitaire. J'utilise moq comme mon cadre moqueur, si cela aide.Comment tester unitairement cette méthode?

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

cheers :)

EDIT: Ce sont surtout les FormsAuthentication je me demandais. Dois-je même tester ça? Je suppose que je devrais mocker une identité et puis vérifier le IsAuthenticated est faux?

Répondre

2

Voici comment procéder avec Moq. Vous avez créé part du principe que d'un IFormsAuthentication comme emballage:

[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

vous pouvez créer une enveloppe pour FormsAuthentication et le talon hors

formsAuthentication = mockery.Stub<IFormsAuthentication>(); 

et faire quelque chose comme ça.

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

/* Asserts to go here */ 

En termes de test de l'authentification FormsAuthentication. Testez cela ailleurs, séparation des préoccupations et tout ça.

Le test pour cette action doit simplement vérifier que la méthode SignOut a été appelée et si la redirection est arrivée. N'oubliez pas que vous testez l'action, pas les méthodes dans l'action. Vous ne testeriez pas le travail du magasin de données dans une action Envoyer, vous vous moqueriez de tout cela.

+0

alors ... aurait dû dire que se fait avec Rhino Mocks ..... mais le principe est tout de même sacrément –

+0

. Je ne peux pas comprendre comment faire ceci avec MOQ :( –

+0

désolé ne peut pas vous aider là car je n'ai aucune expérience avec MOQ du tout. –

Questions connexes