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

Tests et Performance Java Discussion :

[Tests] Différence entre JUnit et Cactus ?


Sujet :

Tests et Performance Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 47
    Points : 41
    Points
    41
    Par défaut [Tests] Différence entre JUnit et Cactus ?
    Bonjour à tous,
    J'ai une petite question : Quelle est la différence entre Cactus et JUnit ?
    Est-ce complémentaire ?
    Merci,

  2. #2
    Membre actif Avatar de coco62
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 237
    Points : 278
    Points
    278
    Par défaut
    Cactus permet de réaliser des tests coté server(Servlets, EJBs, Tag Libs, Filters, ...).
    Junit permet de tester du code java de type POJO(Plain Old Java Object), des classe Java simple quoi.

    A+

  3. #3
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    Ok mais si j'utilise une base de données et que je veux faire des tests sur celles-ci, j'utilise JUnit ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Vas-tu utiliser des Datasources ?

  5. #5
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    La testabilité avec JUnit dépend directement de la dépendance que tu introduis dans ton code vis à vis du conteneur dans lequel tu vas executer ton appli. C'est notamment pour cela qu'il est si difficile de tester des EJB.
    Rien ne t'interdit à priori de tester avec une base de données en arrière plan. Il faut juste faire en sorte que les tests soient reproductibles et qu'ils ne soient pas dépendant les uns des autres (un test ne doit pas s'executer avant un autre pour marcher et plusieurs executions successives des tests donnent le même résultat). Il est bon de prévoir un environnement de test et de faire un rollback sur chacun de tes tests.
    Le mieux que je puisse te conseiller, c'est d'utiliser un framework du type Spring qui te fournira un mécanisme d'injection de dépendance et un tas de classes pour te faciliter les tests.

  6. #6
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    En faite ce que je voudrais savoir, c'est comment fonctionne les tests ? Genre on se connecte à une base de données, ça sera une base de données conçue uniquement pour les tests ou est-ce la vraie ?
    Ensuite, on peut tester quoi sur cette base de données, la connection ? faire des tests sur des données ?
    Je n'arrive pas à comprendre la philosophie des tests.

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Il faudrait déjà que tu définisses eaxtement ce que tu veux tester.

    Est ce certaines méthodes du programme Java ou alors l'état de la base ?

    Je crois plutôt que tu veux vérifier que ta base de données possèdent bien ce que tu veux.

    Pour cela, tu peux utiliser dbUnit : http://dbunit.sourceforge.net/index.html

    Il s'agit d'une extension de JUnit, les assertions vont comparer des tables.

    Va sur le site si tu veux plus de détails sur le fonctionnement. En tous cas, moi je l'ai utilisé, ça marche bien.

    ++

    Antoine

  8. #8
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    Donc en gros, si j'ai bien compris avec dbUnit : on peut se connecter à notre base de données, rajouter des tuples, et faire un test pour voir si ce tuple a bien été inséré ?

    Je vois que l'on doit faire une base de données en XML ?? elle servira de test ?

    Merci pour votre aide,

  9. #9
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    dbUnit te servira à tester ta base de données (je connais juste de nom, je n'ai jamais pratiqué).

    Pour comprendre la philosophie des tests je te conseille ce paragraphe Testing practices.
    On y explique rapidement l'idée de Test Driven Development (TDD) qui est à la base de la démarche XP (eXtreme Programming).

    En résumé, écris tes tests avant de développer. Les tests doivent faire partie des développements et ne pas arriver après coup juste avant une livraison. Penser aux tests pendant tes développements rend ton architecture plus testable (à l'opposé on a des architectures "dé-testables", pas moyen de citer l'auteur de ce jeu de mot son blog étant en rade en ce moment), améliore souvent la qualité de ton code et permet de situer rapidement des sources de bugs ou de régressions.

  10. #10
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    Donc si j'ai bien compris avec DBUnit :
    On a notre base de données, on se connecte à la base de données avec getConnection().
    On la transforme en un fichier XML avec getDataSet().
    Mais si on fait des insert ou des delete, ça ajoute ou supprime bien dans le fichier XML mais pas dans la base de données.
    Et avec les fonctions getSetUpOperation() et getTearDownOperation(), il est possible de retrouver le fichier xml de base. getTearDownOperation() supprimera toutes les modifs effectuées sur ce fichier.

    Sinon, on peut faire nous meme un fichier XML avec des données a l'interieur et faire des tests directement sur ce fichier.

    J'ai bien compris ? ou je suis à coté de la plaque ? ou s'il y a des trucs qui ne sont pas exactes n'hésitez pas à me le dire.

    Merci,

  11. #11
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    Autre question toujours en relation avec DBUnit :
    Je vois dans les exemples qu'ils utilisent MySQL, est-ce que c'est compatible avec postgreSQL ?

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Pamic, je vais essayer de te répondre sur les principes. En revanche pour le code exact je te laisse regarder les exemples sur le site de DBUnit.

    Je pense qu'il est souhaitable que tu te créé un environnement de test. Tes tests vont nécessiter que tu initializes un ensemble de tables, que tu les vides etc... donc fais attention à ça.

    Citation Envoyé par pamic
    Donc si j'ai bien compris avec DBUnit :
    On a notre base de données, on se connecte à la base de données avec getConnection().
    ->Si la doc le dit !

    Citation Envoyé par pamic
    On la transforme en un fichier XML avec getDataSet().
    Mais si on fait des insert ou des delete, ça ajoute ou supprime bien dans le fichier XML mais pas dans la base de données.
    ->Non ce n'est pas ça. Les scripts se font en XML comme tu l'as bien compris. Un DataSet est la représentation d'un ensemble de données compris dans une table.

    -> Le process de tests est plutôt :
    • - J'initialise ma table avec mes données (via DBUnit DataSet en XML)
      - Je fais tourner mon application (ou le bout de mon application qui modifie la table ou non)
      - Je récupère les données de la table (via DBUnit toujours)
      - Je compare les données obtenues avec les données attendues (comparaison de DataSet).


    La comparaison de DataSet se fait via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	assertEquals(IDataSet expectedDataSet, IDataSet actualDataSet)
    Citation Envoyé par pamic
    Et avec les fonctions getSetUpOperation() et getTearDownOperation(), il est possible de retrouver le fichier xml de base. getTearDownOperation() supprimera toutes les modifs effectuées sur ce fichier.
    -> je ne sais plus exactement. Il me semble effectivement que la surcharge (ou non) de ces deux méthodes te permet de dire si tu veux
    que tes tables soient réinitialisées à chaque fois ou non etc

    Citation Envoyé par pamic
    Sinon, on peut faire nous meme un fichier XML avec des données a l'interieur et faire des tests directement sur ce fichier.
    -> là je comprends pas ce que tu veux dire. DBunit compare lui-même les fichiers !

    Sinon évidemment tu peux utiliser d'autres bases que MySQL sinon quel intérêt ????? il suffit qu'il y ait un driver JDBC.

    ++

    Antoine

  13. #13
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assertEquals(IDataSet expectedDataSet, IDataSet actualDataSet)
    Ce code permet de tester directement une table (ou une colonne...), DBUnit compare 2 fichiers XML en faite.

    Je ne comprends pas : c'est nous qui éditons le fichier XML, quand on dit qu'on crée un dataSet, on crée un fichier XML ?

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Oui DBUnit compare les fichiers XML.

    Oui : tu devras créer deux fichiers XML par tests :

    - Un pour les données initiales qui seront contenues dans la table
    - Un autre pour les données que tu attends.

    Pour les créér, tu peux déjà te faire un petit prog qui récupère un DataSet et demander à DBUnit de te l'enregistrer dans un fichier.

    Non, un DataSet n'est pas un fichier XML en tant que tel. Un DataSet est la représentation Objet du contenu d'une table. Et évidemment un DataSet peut être enregistré dans un fichier XML.

    Regarde l'API : Classe org.dbunit.dataset.xml.XmlDataSet


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    static void 	write(IDataSet dataSet, java.io.OutputStream out)
              Write the specified dataset to the specified output stream as xml.
    Faut que tu mettes les mains dans le cambouis.

    ++

    Antoine

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

Discussions similaires

  1. Test différence entre 2 chaines
    Par Thomad dans le forum SQL
    Réponses: 8
    Dernier message: 10/05/2010, 14h52
  2. Réponses: 8
    Dernier message: 03/10/2008, 11h04
  3. Réponses: 1
    Dernier message: 21/03/2008, 17h11
  4. [BO XIr2] Tests sur des différences entre dates
    Par Enthau dans le forum Deski
    Réponses: 4
    Dernier message: 27/07/2007, 10h49
  5. différence entre test et réalité
    Par Pallas4 dans le forum Flash
    Réponses: 6
    Dernier message: 17/08/2006, 12h45

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