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

avec Java Discussion :

Tester des procédures stockées avec SqlUnit et ANT


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut Tester des procédures stockées avec SqlUnit et ANT
    Bonjour,

    c est mon premier post, j espère être dans le bon forum

    Je désire faire une petite application et je cherche a m organiser pour développer dans un premier temps la partie DB.
    J ai décider d utiliser un ensemble de procédure stockées définissant une "API" que le serveur applicatif (Java / tomcat) utilisera pour lire/écrire les données en base (postgresql ou mysql).
    (certains post sur ce forum m'ont confortés dans ce choix)

    Désirant systématiser / automatiser mes tests, j'ai découvert SqlUnit:
    Cette solution me semble à la fois simple et élégante:
    - elle ne nécessite pas (forcement) de coder en java
    - elle permet (aussi) de définir ses tests par via fichiers XML assez simple à lire/écrire
    - elle permet d automatiser le lancement des tests via ANT
    - elle génère des rapport de test XML que l on peut mettre en forme
    - elle supporte les tests sur les procédures stockées
    - L'ensemble peut être contenu dans répertoire indépendant facile à gérer
    En fait, c est la seule solution (open source) fonctionnant ainsi que j ai trouvé...

    Mais... et oui... il y a un mais... après avoir fait beaucoup d essais, j ai une erreur que je ne comprends pas... Si l'un ou l'une de vous pouviez éclairer ma lanterne, cela pourrait peut être aussi intéresser d'autres personnes...
    (j'ai mise en pièce jointe un zip du répertoire contenant les fichiers ci-dessous, j'ai vidé le répertoire SQLunit5)
    j ai la même erreur sous windows XP SP2 avec un oracle 10g (version gratuite)

    Par avance merci

    le message d'erreur:
    <failure message="net.sourceforge.sqlunit.SQLUnitException: Unresolved compilation problem: &#xa;&#x9;The constructor XMLOutputter(Format) is undefined&#xa;"/>
    la configuration:

    OS: MAC OSX 10.5
    Java: 1.5.0_20-141
    DB: MySql 5.1.31
    le driver MySql (mysql-connector-java-5.0.8-bin.jar) est dans JAVA_HOME/lib/ext

    Structure de fichiers:
    /MyTest
    L"properties" (folder)
    L"connection.properties" (files)
    L"WebTestReport.xsl" (files)
    L"results" (folder)
    L"sqlunit-5.0" (folder)
    L"tests" (folder)
    L"test01.xml" (files)
    L"build.xml"
    L"run.sh"

    Contenu du fichier "connection.properties":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #
    # properties/connection.properties
    #
    # mysql-connector-java-5.0.8-bin.jar
    sqlunit.driver = com.mysql.jdbc.Driver
    sqlunit.url = jdbc:mysql://localhost:3306/test
    sqlunit.user = user
    sqlunit.password = user
    Contenu du fichier "run.sh":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    export CLASSPATH=/testsql/sqlunit-5.0/lib/log4j-1.2.13.jar:/testsql/sqlunit-5.0/lib/junit.jar:/testsql/sqlunit-5.0/lib/jdom.jar:.
    echo $CLASSPATH
    ant run
    Contenu du fichier "build.xml":
    Code XML : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?xml version="1.0"?>
    <project name="slqlunit" basedir=".">
    <description>SQLUnit tests tasks</description>
    <!-- Sets variables which can later be used. -->
    <!-- The value of a property is accessed via ${} -->
    <property name="sql.debug" value="true" />
    <!-- This is specified once per buildfile -->
    <target name="def">
      <taskdef  name="sqlunit"
                classname="net.sourceforge.sqlunit.ant.SqlunitTask" >
        <classpath>
          <pathelement location="${basedir}\sqlunit-5.0\lib\sqlunit-5.0.jar" />
        </classpath>
      </taskdef>
    </target>
    <!-- This is repeated for each test or group of tests in case of nested filesets -->
    <target name="run" depends="def">
      <sqlunit  testfile="${basedir}\tests\test02.xml"
                haltOnFailure="false"
                debug="${sql.debug}"
                logfile="${basedir}\results\result_test01.xml"
                logformat="canoo"/>
    </target>
    <!-- reporting -->
    <target name="htmlreport">
       <delete file="${basedir}\results\result_test01.html" />
       <xslt in="${basedir}\results\result_test01.xml"
             out="${basedir}\results\result_test01.html"
             style="${basedir}\properties\WebTestReport.xsl" />
    </target>
    </project>

    Contenu du fichier "test01.xml":
    Code XML : 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
    <?xml version="1.0"?>
    <!DOCTYPE sqlunit SYSTEM "file:docs/sqlunit.dtd">
    <sqlunit>
    <connection connection-id="1" extern="C:\mytest\properties\connection.properties" />
    <!-- basic tests of SQLUnit functionality -->
    <test name="Testing DataBase access">
      <sql connection-id="1">
        <stmt>SELECT 1 as col1 FROM DUAL</stmt>
      </sql>
      <result>
        <resultset id="1">
          <row id="1">
            <col id="1" name="col1" type="INTEGER">1</col>
          </row>
        </resultset>
      </result>
    </test>
    </sqlunit>
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Bonjour,

    D'apres le message d'erreur il semblerait qu'il manque un pakage ou se trouve
    XMLOutputter (jdom).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut
    Bonjour

    merci pour l a réponse, c est bien ce qu il me semblait avoir compris, je n arrive pas a trouver le jar manquant a rajouter dans le ClassPath... Même avec tout les JAR présent dans "/sqlunit-5.0/lib/" ajoutes dans le CLASSPATH, on a la même erreur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    export CLASSPATH=/testsql/sqlunit-5.0/lib/commons-beanutils-1.7.0.jar:/testsql/sqlunit-5.0/lib/commons-jexl-1.0.jar:/testsql/sqlunit-5.0/lib/commons-lang-2.1.jar:/testsql/sqlunit-5.0/lib/commons-lang.jar:/testsql/sqlunit-5.0/lib/commons-logging-1.0.4.jar:/testsql/sqlunit-5.0/lib/jdom-1.0.jar:/testsql/sqlunit-5.0/lib/jdom-contrib.jar:/testsql/sqlunit-5.0/lib/jdom.jar:/testsql/sqlunit-5.0/lib/junit.jar:/testsql/sqlunit-5.0/lib/log4j-1.2.13.jar:/testsql/sqlunit-5.0/lib/mockrunner.jar:/testsql/sqlunit-5.0/lib/sqlunit-5.0.jar:/testsql/sqlunit-5.0/lib/xercesImpl.jar:.
    echo $CLASSPATH
    ant run
    Bonne soiree

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut
    Bonjour

    apres moultes recherches, j ai trouve la solution qui reside en un seul mot: recompiler.
    Il faut:
    - recuperer la version 1.1 de jdom (qui a le merite d etre livree avec les scripts ant de compilation)
    - recompiler cette librairie sur sa machine avec le script ant (commande "ant package")
    - mettre a jour sqlUnit avec le nouveau jar de jdom
    - recompiler sqlUnit avec le script ant (commande "ant install")
    et la, plus de message d erreur
    et l exemple fournit ci dessus fonctionne sans soucis.
    C est meme tres agreable de pouvoir tres simplement et rapidement:
    - supprimer et recreer systematiquement la base de donnees avec un jeu de tests tout "neuf"
    - tester systematiquement la structure de la base
    - developper des fonctions et/ou procedures stockees en developpant en premiers les tests
    et tout ca sans taper une seule ligne de code java, que du sql et de l xml

    Ca marche tres bien avec MySql et oracle 10g (version "libre")
    Il y a un message d erreur "because null" avec postgresql mais il existe une solution de contournement dans forum sqlUnit:
    il faut remplacer dans le fichier "ConnectionHandler.java"
    la ligne 255
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Map defTypeMap = conn.getTypeMap();
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Map defTypeMap = conn.getTypeMap();
    if (defTypeMap == null) {
      //defTypeMap = new Map();
    } else {
      defTypeMap.putAll(typeMap);
     StructBean.setTypeMap(defTypeMap);
    }
    et de recompiler, ca n est peut etre pas tres elegant (si vous avez une proposition...) mais ca permet de fonctionner sans erreur

    Bonne journee

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

Discussions similaires

  1. Implémentation d'une DAL utilisant des procédures stockées avec SQL Server
    Par youness78 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 30/10/2013, 09h32
  2. Manipulation des procédures stockées avec Netbeans
    Par proDZ dans le forum NetBeans
    Réponses: 0
    Dernier message: 13/03/2012, 14h56
  3. EFCachingProvider avec Entity Framework 4 et des procédures stockées
    Par aymeric.lagier dans le forum Entity Framework
    Réponses: 2
    Dernier message: 08/07/2010, 19h53
  4. Récupérer plusieurs lignes avec des procédures stockées
    Par GPZ{^_^} dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/03/2007, 13h16

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