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

Langage Java Discussion :

Tests non unitaires


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 43
    Par défaut Tests non unitaires
    Bonjour,
    j'aime beaucoup le framework JUnit, très pratique.
    J'élabore en ce moment des tests qui, bien qu'ils soient assez simples, ne sont pas à mon avis unitaires : ils couplent plusieurs classes, et plusieurs méthodes dans chaque classe.
    Existe-t-il des conventions pour de tels tests ? J'ai cru comprendre qu'il était recommandé d'éviter JUnit. Vaut-il mieux écrire un "vrai" programme de test Java, qui émet un rapport ? Si oui, existe-t-il des librairies pour créer des rapports de test simplement ? Puis-je encore utiliser les assertions définies dans JUnit ?
    Merci d'avance pour vos réponses,
    Sébastien

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Si tu veux vraiment faire du test purement unitaire, JUnit seul ne suffit pas. Puisqu'à un moment ou à un autre, tu dois faire tourner une bonne partie du programme. Des développeurs se sont aperçu de ces limites et ont développé des bibliothèques de ce qu'on appelle le "mocking". Actuellement en Java, il existe deux outils de ce genre principaux : JMock et EasyMock. Même si je sais ce que cela fait en théorie, je n'ai jamais utilisé ces deux outils en profondeur et ne pourrais en faire une comparaison.

    Pour info, le mocking, c'est le fait de simuler un comportement avec des objets dummy, voir http://en.wikipedia.org/wiki/Mock_object.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 43
    Par défaut
    En fait, je crois que je sors très largement du cadre des tests unitaires. En effet, je teste par exemple plusieurs implémentations de plusieurs méthodes permettant d'effectuer le même calcul. Mon test consiste alors à vérifier que les différentes méthodes donnent le même résultat (pas question de *simuler* le comportement d'un objet, il me faut son comportement réel...).
    Les tests sont donc beaucoup plus élaborés, mais par contre, j'ai l'impression de réinventer la roue à chaque fois que je veux écrire un tel test. Je me demandais si des gens avaient réfléchi à une architecture commune pour de tels tests "étendus".
    Merci d'avance !!!
    S

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il faut pas te concentrer comme ça sur le mot "unitaire" de test unitaire. Une unité n'est pas nécessairement un module de l'application. vois plutot une unité comme un comportement de ton application. Par exemple, dans ton cas, trois modules de calculs codés différement doivent te fournir le même résultat. Ca c'est bien une unité de test, que tu pourrais appeler, par exemple "TestModulesHaveSameResults". Il arrive souvent que pour une batterie de tests, tu as besoin de faitre toujours la même initalisation. DAsn ce cas, ce que je fait personnellement, je crée une abstract class, qui étends TestCase et qui fait toujours plus ou moins la meme initialisation dans le setup. Eventuellement je passe des argument à setup (comme quand par exemple il faut pouvoir spécifier un fichier de config différent pour certains tests). J'y met souvent aussi quelques méthodes permettant de créer des choses basique. Exemple un tst abstrait pour des classes hibernante, j'y mettrais par exemple quelque méthode genre "createVehicule(brand,year)" qui me permettent de ne pas dupliquer partout du code créant des véhicule à chauqe fois que j'en ai besoin

    Bref, on applique dans les tests unitaire les même regle de récupération de code et de hierarchie de classes qu'on applique dans le code principal. (Souvent on est assez laxiste pour aller plus vite :p)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 43
    Par défaut
    Merci pour cette réponse !
    J'en reste donc à utiliser JUnit, même si mes tests deviennent assez compliqués, et surtout s'ils "croisent" plusieurs classes.
    Sébastien

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Je crois que je me suis mal exprimé.

    Le mocking ne consiste pas en la simulation d'objets à tester, mais en la simulation d'objets dont dépend l'objet à tester.

    Donc en gros, on a A qui doit être testée, A contient B et C. Nous simulerons le comportement de B et de C tels qu'ils doivent être utilisés par A.

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

Discussions similaires

  1. [lsqnonlin] test non réussi
    Par Dam2227 dans le forum MATLAB
    Réponses: 6
    Dernier message: 31/03/2009, 18h16
  2. Test non bloquant de présence de caractères dans sys.stdin?
    Par tyrtamos dans le forum Général Python
    Réponses: 2
    Dernier message: 31/08/2008, 19h05
  3. opérateur de test "non égal"
    Par lionhigh dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/07/2008, 15h34
  4. [CruiseControl] Comment avoir les résultats de test non-unitaires ?
    Par SimonTab dans le forum Intégration Continue
    Réponses: 0
    Dernier message: 26/06/2008, 10h30
  5. [outil] Test non régression
    Par guen dans le forum Access
    Réponses: 1
    Dernier message: 13/05/2007, 12h02

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