IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MVC Discussion :

Test unitaires sur des helpers statiques pour un projet MVC


Sujet :

MVC

  1. #1
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut Test unitaires sur des helpers statiques pour un projet MVC
    Bonjour,

    J'ai créé une bibliothèque avec des petits helpers tous simples (souvent des extensions classe statique, méthode statique).
    Je voudrais ajouter des tests unitaires pour assurer que le build passera bien.

    Depuis mon projet MVC je peux, par exemple utiliser un helper pour encoder un mot de passe (j'ai trouvé ce code sur Internet) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            public static string EncodePasswordWithSHA1(string password, string validationKey)
            {
                string toReturn = string.Empty;
                HMACSHA1 hash = new HMACSHA1 { Key = validationKey.HexToByte() };
                toReturn = Convert.ToBase64String(hash.ComputeHash(Encoding.Unicode.GetBytes(password)));
                return toReturn;
            }
    Sachant qu'actuellement la DLL est référencée en dur. Je voudrais savoir comment la tester et au final obtenir un couplage faible.

    J'ai essayé d'utiliser Unity et pour se faire extraire l'interface mais je viens de découvrir (honte à moi) que les interfaces n'existent pas pour les classes statiques.

    Vous pourriez m'aider ?

    Merci

  2. #2
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 918
    Points
    2 918
    Par défaut
    Hello,

    • Si l'objectif est de tester l'objet consommateur de cette classe statique en isolation de celle-ci, malheureusement ça va être compliqué en l'état, méthodes statiques et testabilité ne font pas bon ménage. Par nature, une dépendance à une classe statique est un couplage fort et on ne peut pas l'abstraire. Mais ce n'est pas forcément grave car la méthode ne fait appel qu'à des fonctionnalités de base du framework .NET et reste en mémoire (pas d'accès disque/réseau/...) donc ça ne devrait pas trop ralentir le test.

      Si tu tiens absolument à abstraire la notion de chiffrement pour avoir un couplage faible, il faut un helper non statique (une classe normale instanciée par Unity) avec exactement la même méthode mais pas statique, et une interface ou une classe abstraite au-dessus.

    • Si l'objectif est de tester la méthode EncodePasswordWithSHA1() elle-même, pas de problème, il suffit de créer un test unitaire et d'asserter sur des valeurs de retour connues pour un input donné. Tu peux aussi rajouter des tests sur des valeurs aux limites (chaines vides, nulles, etc.)

  3. #3
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut Merci
    Bonjour,

    J'ai effectivement fait ça et ça fonctionne. C'est un contournement mais ça m'amène à me poser la question suivante :

    Si on fait des classes d'extension on ne peut donc pas tester les méthodes, n'est-ce pas ? Ou alors on référence la classe d'extension en dur et après on test la méthode englobante (ce qui pose aussi le problème des dépendances).

    Merci

  4. #4
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 918
    Points
    2 918
    Par défaut
    Citation Envoyé par Nadinette Voir le message
    Si on fait des classes d'extension on ne peut donc pas tester les méthodes, n'est-ce pas ?
    On ne peut pas mocker les méthodes d'extension, si c'est ce que tu veux dire, avec certains frameworks (Moq) mais d'autres (TypeMock, payant) le permettent.

    Par contre les méthodes d'extension peuvent très bien être testées en elles-mêmes. Il suffit que le test référence le namespace où elles sont déclarées et les appelle.

  5. #5
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Merci pour vos conseils
    Finalement, j'ai créé un projet de test spécifique, j'ai référencé en dur la classe statique et je l'ai testé à l'ancienne...
    Ca me suffit.
    Le seul souci c'est si je veux tester pendant la build j'ai peur que ça ne fonctionne pas.
    Je mets quand même un résolu.
    Bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/05/2012, 08h30
  2. Réponses: 4
    Dernier message: 03/07/2009, 19h06
  3. [Joomla!] Placer des liens externes sur des pages statiques
    Par BRMAR dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 17/07/2007, 18h04
  4. Test if sur des float
    Par Minuit dans le forum Linux
    Réponses: 2
    Dernier message: 26/03/2005, 13h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo