47 votes

Comment puis-je l'unité de test de mon ASP.NET MVC contrôleur qui utilise FormsAuthentication?

Je travaille avec un ASP.NET MVC solution dans un test driven et je veux connecter un utilisateur de mon application en utilisant l'authentification par formulaires. Le code que je voudrais terminer avec le contrôleur ressemble à quelque chose comme ceci:

FormsAuthentication.SetAuthCookie(userName, false);

Ma question est comment puis-je écrire un test pour justifier ce code?

Est-il un moyen de vérifier que le SetAuthCookie méthode a été appelée avec les paramètres corrects?

Est-il possible d'injecter un faux/maquette FormsAuthentication?

68voto

Darin Dimitrov Points 528142

Je voudrais commencer par écrire une interface et une classe wrapper qui va encapsuler cette logique, puis utilisez l'interface de mon contrôleur:

public interface IAuth 
{
    void DoAuth(string username, bool remember);
}

public class FormsAuthWrapper : IAuth 
{
    public void DoAuth(string username, bool remember) 
    {
        FormsAuthentication.SetAuthCookie(userName, remember);
    }
}

public class MyController : Controller 
{
    private readonly IAuth _auth;
    public MyController(IAuth auth) 
    {
        _auth = auth;
    }

}

Maintenant IAuth pourrait facilement être moqué dans une unité de test et vérifiez que le contrôleur d'appels attendus méthodes. Je ne ferais PAS de test de l'unité de la FormsAuthWrapper classe parce qu'il vient de délégués de l'appel à la FormsAuthentication qui fait ce qu'il est censé faire (Microsoft garantie :-)).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X