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

Maven Java Discussion :

Maven (hudson) : comment ordonner les TestCase via Maven


Sujet :

Maven Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut Maven (hudson) : comment ordonner les TestCase via Maven
    Bonjour,

    J'ai un projet maven 2 sous Hudson, et je cherche à lancer un TestCase s'occupant d'initialiser la BDD (un DBUnit), et ensuite les TestCases qui vérifient certaines données de la BDD.

    Actuellement il lance les TestCase dans un ordre non défini, mais que je voudrais lui préciser ?

    Dois-je installer un plugin pour Hudson ?
    Existe-t-il un GOALS ou options Maven pour ordonner les TestCases ?

    Actuellement mes options de lancement sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clean deploy -Dmaven.test.skip=false
    Merci d'avance

  2. #2
    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
    Par principe, des testcase ne sont pas supposés être interdépendant. Ca va à l'encontre du concept unitaire des unit test. Si tu as besoin d'un initialisation, il est préférable de faire celle ci, soit dans les units tests eux même (Si ils utilisent tous la meme base de données, fait les tous hériter d'une même classe abstraite étandant testcase et faisant l'init dans sa méthode setUp()), soit rajouter dans maven, pour la phase test, un goal qui initialiserais ta db (le goal en question dépendant fortement de ce à quoi ressemble ton projet: goal ant, goal plus évolué, plugin "maison", etc).

    Si vraiment, tu veux faire moche, tu peux toujours aligner deux batteries de test dans maven, le tout sous forme de edeux plugins avec des configuration différentes mis dans la phase de test. Dans l'un tu dit de tester les classes *Init (pour l'initialisation du test), dans l'autre tu test *Test.

    Ces système avec une initialisation extérieur sont cependant problématique. Exemple: impoosible de lancer un test tout seul (ce qu'on fait régulièrement dans le développement, histoire de pas se tapper toute la batteries quand t'as qu'une classe a vérifier)

  3. #3
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    Mais si je fais hériter chaque TestCase du TestCase A qui initialise la BDD, cela veut dire que pour chaque TestCase, A sera lancé ?

    moi je veux juste que A se lance une fois au démarrage de mes TestCase ?

    Car en fait pour initialiser ma BDD j'ai un TestCase qui remplit les données de la BDD.
    C'est pour çà que je dois lancer les autres TestCase qu'une fois le premier executer.

    Mon goal est vraiment simpliste.

    Sinon je mets tous dans un TestSuite, mais comment lancer le TestSuite avec Maven ?

  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
    Le but est de faire hériter tout ce qui a besoin de la db d'une meme classe abstraite, qui ne fait que le setUp() (ne contient pas de test, voir la description de méthode setUp des testCase pour plus d'info).

    Si la base de donnée est la même pour tous les test, pourquoi ne pas la construire une fois pour toute, et ensuite utiliser cette 'image' en lecture seul comme fondation pour chaque test. C'est personnellement ce que je fais avec du hsqldb: copie des fichiers de la db dans un répertoire propre au testcase puis démarrage de hsqldb dessus. ainsi, pas d'effet de bord entre les tests.

    Pour ce qui est des testsuite, çà a été un problème pendant un certain temps (maven ne comptais pas les testsuites comme des tests valables). C'est corrigé avec la version 2.3 du plugin surefire (http://jira.codehaus.org/browse/SUREFIRE-120)

  5. #5
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    La structure et les données de la base évolue sans cesse, c'est pourquoi nous l'initialisons avec DBUnit.

    A chaque grosse modif, nous cassons la base, et la reconstruisons avec DBUnit, et seulement après nous lançons les TestCases.

    Pour le moment, nous avons tous nos Tests dans un même TestCase qui initialise la base au lancement avec la méthode setUp(). Ce qui n'est pas jojo...

    Je recherche donc un moyen soit de lancer en 1er, le TestCase qui initialise la base, et ensuite les autres même désordonnés.

    Est-il possible de créer un GOALS Maven qui lancerait juste une classe spécifique ou un testCase, avant de passer au Goals "test" qui lance les tests cases ?

    J'ai essayé les options -nomatchpattern=*TestCase* (un truc du genre), mais sans grand succés.

    Merci

  6. #6
    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
    comme je l'ai dit, il me semble, tu peux configurer deux goals basés sur le même plugin (surefire). Le premier serait configuré avec comme filtre uniquement la classe d'init. Le deuxième avec les autre classes.

    Il suffit de faire deux section "plugin" dans le "build" au niveau du pom.xm, avec des configuration différentes. Pour configurer surefire: http://maven.apache.org/plugins/mave...test-mojo.html

    Tu trouvera aussi sur le site de maven toute l'architecture du pom

  7. #7
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    J'ai créé une classe dont tous mes TestCase héritent.

    Dans cette classe j'ai une HashMap en static contenant le nom des testcases lancés. Ce qui me permet d'autoriser à initialiser les tables qu'une fois par TestCase et non pour chaque méthode de mon TestCase. Et aussi de ne pas réinitialiser une table déjà initialisée par un testCase.

    Car pour rappel, nos données sont vraiment volumineuses et changent souvent, c'est pour celà que nous devons initialiser notre BDD au lancement des JUnit.

    Ensuite pour ignorer certain Testcase j'utilise le plugin SureFire 2.4 avec l'attribut <excludes>.

    Tout fonctionne comme je le voulais.

    Merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/02/2012, 20h35
  2. Réponses: 7
    Dernier message: 25/09/2009, 10h02
  3. [Checkstyle] [Maven] comment paramétrer les conventions ?
    Par bassemeco dans le forum Qualimétrie
    Réponses: 1
    Dernier message: 15/02/2008, 08h36
  4. Comment ordonner les colonnes dans un indexe
    Par Fba_mainsys dans le forum SQL
    Réponses: 4
    Dernier message: 10/10/2007, 11h59
  5. Comment mettre les classes là où veut Maven ?
    Par gifffftane dans le forum NetBeans
    Réponses: 1
    Dernier message: 11/02/2007, 14h27

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