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

C# Discussion :

Tests unitaires - Exceptions multiples


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut Tests unitaires - Exceptions multiples
    Salut !

    Je suis en train de coder des tests unitaires, et j'aurais une petite question.
    Un test est destiné à comparer le contenu d'un objet (ses propriétés uniquement) généré à partir d'une ancienne et d'une nouvelle version d'une dll. Pour l'instant, je faisais une série de if, et je remplissais une liste de string du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    List<string> erreur = new List<string>();
    if(oldObjet.Propriete1 != newObjet.Propriete1)
    {
       erreur.Add("Propriete1 a changé");
    }
    if(oldObjet.Propriete2 != newObjet.Propriete2)
    {
       erreur.Add("Propriete2 a changé");
    }
    ...
    if(erreur.Count > 0)
    {
       string message = "";
       foreach(string str in erreur)
       {
          message += str + Environnement.Newline;
       }
       throw new Exception("message")
    }
    Je trouve que ce n'est pas très propre de procéder ainsi. J'aimerais entre autre qu'à chaque test d'une propriété, je puisse faire un throw d'une exception typée de mon cru pour pouvoir emettre au final un message formatté. Je pourrais donc par exemple faire un throw et intercepter l'exception pour la mettre dans une liste d'exceptions. Je me retrouverais ainsi avec un code similaire à celui-ci, en remplaçant "erreur.Add("...")" par un truc du genre "throw new MonException("...")". Le problème, c'est que si je fais un throw à la suite d'un if, le reste du code n'est pas évalué et donc le test sort au premier problème sans tester les autres propriétés, chose que je ne veux pas.

    Quelqu'un aurait-il une solution miracle à ma question ? Je peux aussi être plus flou si vous voulez

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Software Developer
    Inscrit en
    Mars 2008
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Software Developer

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 470
    Par défaut
    Euh...
    Je ne sais pas trop quelle est le type de classe de ce code, mais generalement les tests unitaires se font avec des outils tels NUnit (http://www.nunit.org/).
    NUnit est tres simple et puissant, tu peux l'integrer a Visual Studio si tu le souhaite (Visual NUnit).

    Regarde des screenshot et je pense que tu te tournera vers cette solution. Les tests unitaires ne lancent rarement d'exception mais utilisent Asset.AreEquel("var a", "var b", "var a and b are differents!");

    Par ailleurs decoupe ton code en plus petits fragments (plus lisible, maintenable et moins de redondance)

  3. #3
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut
    J'utilise l'outil de test de Visual Studio 2010 et le tout roule sur un serveur... et ce n'est pas moi qui décide où faire tourner les tests lol

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Software Developer
    Inscrit en
    Mars 2008
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Software Developer

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 470
    Par défaut
    OK
    Pour info NUnit teste ta dll donc tu peux tester sur ta machine.

    Pour revenir a ton sujet, je te conseille de creer une nouvelle classe generique qui est une collection d'Exception.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class MyErrorList<T>
    {
    private IEnumerable<T> list;
    public MyErrorList<T>()
    {
    list = new IEnumerable<T>();
    }
    }
    public void Add(T exception)
    {
    list.Add(exception);
    }
    public IEnumerable<T> GetList()
    {
    return list;
    }
    Tu instancie cette classe au debut de ton test (utilise Exception tu tu veux stocker tous les types d'exception) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var myErrorList = new MyErrorList<Exception>();
    Tu ajoute tes erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myErrorList.Add(new ArgumentException("..."));
    Et a la fin tu affiche tes erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(myErrorList.GetList().ToString("\n"));
    J'espere que cela repond a ta question.

    Selon ton projet tu sera peut-etre amener a parcourir tes classes pour les comparer, penses a utiliser la reflexion (System.Reflection namespace).

    Bon courage.

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par alex_vino Voir le message
    Euh...
    Je ne sais pas trop quelle est le type de classe de ce code, mais generalement les tests unitaires se font avec des outils tels NUnit
    Visual Studio (depuis la version 2005) intégre déjà un environnement de test comprenant les exécution centralisées avec intégration continue (avec TFS).

  6. #6
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut
    Merci alex_vino, c'est exactement ce à quoi j'avais pensé, et c'est un peu ce que j'avais déjà fait (j'utilise une liste de string au lieu d'une collection d'exceptions ce qui au final revient un peu au même).
    Je vais voir comment je me debrouille pour être le plus générique possible au niveau du message d'erreur que je retourne.
    Merci encore.

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Software Developer
    Inscrit en
    Mars 2008
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Software Developer

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 470
    Par défaut
    Citation Envoyé par androz Voir le message
    Je vais voir comment je me debrouille pour être le plus générique possible au niveau du message d'erreur que je retourne.
    Le genericite a beaucoup d'avantages, faire une liste de string aurait ete contraignant. Tu peux aussi creer tes propres exceptions.

    Et en plus, la genericite c'est simple

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

Discussions similaires

  1. [Hudson] exception lors de l'exécution de tests unitaires nunit
    Par Kalisto44 dans le forum Intégration Continue
    Réponses: 1
    Dernier message: 14/04/2011, 11h40
  2. Tests Unitaires - Production de documents
    Par giviz dans le forum Test
    Réponses: 13
    Dernier message: 07/02/2005, 08h41
  3. Tests unitaires en C#
    Par Bouboubou dans le forum Test
    Réponses: 2
    Dernier message: 01/10/2004, 13h03
  4. [TESTS] Tests unitaires
    Par mathieu dans le forum Test
    Réponses: 4
    Dernier message: 08/01/2004, 12h59

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