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

Java EE Discussion :

JUnit et JNDI


Sujet :

Java EE

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 30
    Par défaut JUnit et JNDI
    Bonjour tout le monde !!

    Je me pose une question à savoir s'il est possible de tester unitairement une classe qui se connecte à une base de données ?
    Je suis allé sur une piste qui consiste à mettre les données oracle dont j'ai besoin dans la base hsqldb qui est facilement transportable surtout pour les tests unitaires, il me semble. Mais je rappelle que je ne suis pas expert en la matière. A cet effet, j'ai mis le hsqldb.jar dans la lib de mon projet et dans le classpath de netbeans.

    J'ai tenté de créer un simulacre avec EasyMock mais avec un dao, cela ne semble pas fonctionner. Le dao dépendant de java.sql.DataSource. mais j'ai laissé rapidement cette piste ...

    J'ai un doute sur ma démarche concernant ma démarche sur hsqldb; et surtout sur InitialContext().lookup qui ne fonctionne que via un serveur d'application.

    Des bienfaiteurs sur ce forum peuvent-ils m'aider à avancer je suis complètement bloqué !!

    Voici mon code :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package com.service;
     
    import com.Mobile;
    import com.Exception;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.List;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.sql.DataSource;
    import org.easymock.EasyMock;
    import org.easymock.internal.MockInvocationHandler;
    import org.hsqldb.jdbc.jdbcDataSource;
     
    import org.hsqldb.util.DatabaseManager;
    import org.junit.After;
    import org.junit.Assert;
    import org.junit.Before;
    import org.junit.Test;
     
    /**
     *
     * @author coolcoolcool
     */
    public class ServiceTest {
        private Service as;
        private static final String jndi = "jndi/test";
     
     
     
        @Before
        public void setUp () throws NamingException, SQLException {
            as = new Service();
            createJNDIContext();
            createDBTable();
     
     
        }
     
        @After
        public void tearDown () {
     
        }
     
        @Test
        public void testMobiles () throws Exception {
            List<Mobile> liste = null;
            try {
                liste = as.getMobiles();
                EasyMock.expect(as.getMobiles()).andStubReturn(liste);
            } catch (Exception e) {
                      e.getMessage());
            }
     
            // Je fais mes assertions ici
        }
     
        public static void createJNDIContext () throws NamingException {
            DatabaseManager dm = new DatabaseManager();
            jdbcDataSource source = new jdbcDataSource();
            source.setDatabase("jdbc:hsqldb:mem:mymemdb");
            source.setUser("SA");
     
            System.setProperty(Context.INITIAL_CONTEXT_FACTORY, MockInvocationHandler.class.getName());
     
            Context ic = new InitialContext();
            ic.bind(jndiName, source);
     
        }
     
        private static void createDBTable () throws NamingException, SQLException {
            DataSource ds = null;
            Connection conn = null; 
            try {
                ds = (DataSource) new InitialContext().lookup(jndi);
                conn = ds.getConnection();
                String create = "CREATE TABLE LISTETABLE ("
                        + "table1, table2, table3"
                        + ")"; // mettre la requête par ici.
                Statement stmt = conn.createStatement();
                stmt.executeUpdate(create);
     
            } catch (Exception e) {
     
            } finally {
                if ( conn != null) {
                    conn.close();
                }
     
            }
     
     
        }
     
    }

  2. #2
    BsT
    BsT est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Par défaut
    J'espere que ce lien pourra vous aider :
    http://blogs.sun.com/randystuph/entr...rces_for_junit

  3. #3
    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
    la démarche est bonne. Sauf qu'en plus d'initialiser un DB (Hsql ou autre), ton test unitaire doit initaliser un JNDI. Le plus simple pour moi, c'est d'utiliser simple jndi, une api destinée à ce genre de cas, qui permet facilement de construire un arbre JNDI et d'y mettre des datasources et autres

Discussions similaires

  1. Junit / Spring / Jpa (peu être JNDI?)
    Par imesto dans le forum Tests et Performance
    Réponses: 4
    Dernier message: 11/03/2013, 11h18
  2. Réponses: 0
    Dernier message: 17/02/2011, 14h40
  3. [JUnit] NoClassDefFoundError:junit/framework/TestCase
    Par Adjanakis dans le forum Tests et Performance
    Réponses: 4
    Dernier message: 14/04/2004, 13h23
  4. Réponses: 3
    Dernier message: 09/04/2004, 23h35
  5. [JNDI] [LDAP] [DirContext] [LdapContext] DN / introspection
    Par wazup dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 09/04/2004, 15h16

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