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 :

Junit4 et JEE6 [JUnit]


Sujet :

Tests et Performance Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 40
    Points : 22
    Points
    22
    Par défaut Junit4 et JEE6
    Bonjour,

    Je viens de migrer une application java vers Glassfish 3.1. L'application utilise Eclipselink 2.4. Lors de l'execution des tests unitaires sous maven, j'obtiens l'erreur suivante :
    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
    java.lang.NoClassDefFoundError: com.timm.mcr.persistence.PersistenceTestCase
    	at java.lang.Class.getDeclaredMethods0(Native Method)
    	at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
    	at java.lang.Class.getMethod0(Class.java:2670)
    	at java.lang.Class.getMethod(Class.java:1603)
    	at org.junit.internal.builders.SuiteMethodBuilder.hasSuiteMethod(SuiteMethodBuilder.java:20)
    	at org.junit.internal.builders.SuiteMethodBuilder.runnerForClass(SuiteMethodBuilder.java:13)
    	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    	at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    	at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    	at org.apache.maven.surefire.junit4.JUnit4TestSet.<init>(JUnit4TestSet.java:45)
    	at org.apache.maven.surefire.junit4.JUnit4DirectoryTestSuite.createTestSet(JUnit4DirectoryTestSuite.java:56)
    	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.locateTestSets(AbstractDirectoryTestSuite.java:96)
    	at org.apache.maven.surefire.Surefire.createSuiteFromDefinition(Surefire.java:209)
    	at org.apache.maven.surefire.Surefire.run(Surefire.java:156)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
    	at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
    Le code source est le suivant :
    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
    // fichier1
    public abstract class PersistenceTestCase extends TestCase {
     
    	static private EntityManagerFactory emf;
     
    	static {
    		try {
    			emf = Persistence.createEntityManagerFactory("mcrPersistence-UT");
    		} catch (Exception e) {
    			emf = Persistence.createEntityManagerFactory("mcrPersistence-UT");
    		}
    	}
     
    	protected EntityManager entityMgr;
    	protected EntityTransaction tx;
     
    	protected void setUp() throws Exception {
    		super.setUp();
    		entityMgr = emf.createEntityManager();
    		tx = entityMgr.getTransaction();
    		tx.begin();
    	}
     
    	protected void tearDown() throws Exception {
    		tx.rollback();
    		super.tearDown();
    	}
    ...
    }
    // fichier 2
    public class AccountFacadeTest extends PersistenceTestCase {
     
    	...
     
    	@Before
    	protected void setUp() throws Exception {
    		super.setUp();
     
    		...
    	}
     
    	@After
    	protected void tearDown() throws Exception {
    		super.tearDown();
    	}
    ...
    }
    Dépendances Maven :
    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
     
    		<dependency>
    			<groupId>javax</groupId>
    			<artifactId>javaee-api</artifactId>
    			<version>${javaee-api.version}</version>
    			<scope>provided</scope>
    		</dependency>
    ...
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>${junit.version}</version>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.eclipse.persistence</groupId>
    			<artifactId>eclipselink</artifactId>
    			<version>${eclipselink.version}</version>
    			<scope>test</scope>
    		</dependency>
    Mon environnement de travail est linux gentoo amd64, eclipse 3.7.1, maven 3.0.1 (ou 2.2.1).

    Quelle peut être la source de cette erreur ?

    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    J'ai également une autre erreur sur un autre fichier source :
    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
    initializationError(com.timm.mcr.persistence.PricelistCreditFacadeTest)  Time elapsed: 0.004 sec  <<< ERROR!
    .lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/persistence/Persistence
    	at java.lang.ClassLoader.defineClass1(Native Method)
    	at java.lang.ClassLoadjavaer.defineClassCond(ClassLoader.java:631)
    	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    	at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    	at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    	at com.timm.mcr.persistence.PersistenceTestCase.<clinit>(PersistenceTestCase.java:24)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    	at junit.framework.TestSuite.createTest(TestSuite.java:61)
    	at junit.framework.TestSuite.addTestMethod(TestSuite.java:283)
    	at junit.framework.TestSuite.<init>(TestSuite.java:146)
    	at org.junit.internal.runners.JUnit38ClassRunner.<init>(JUnit38ClassRunner.java:71)
    	at org.junit.internal.builders.JUnit3Builder.runnerForClass(JUnit3Builder.java:14)
    	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    	at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    	at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    	at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:33)
    	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:146)
    	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103)
    	at $Proxy0.invoke(Unknown Source)
    	at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:145)
    	at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:87)
    	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)
    Après consultation de quelques post sur ce sujet sur le net, j'ai vérifier que le PersistenceManager est bien inclus dans les tests unitaires.

  3. #3
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Déjà ton chargement d'entity manager est étrange. Si tu lèves une exception, tu relances le même code (qui dans ce cas, va très probablement relancer une erreur ...).

    As-tu bien mis le fichier persistence.xml dans test/java/resources ?

    De plus, pourquoi EclipseLink n'est accessible que pour les tests ? Il devrait être en provided (au moins).

    Avant de lancer tes tests unitaires avec Eclipse, as-tu pensé à bien faire un "mvn clean compile" ? Car si le répertoire target/ n'existe pas, ou ne contient pas les classes compilées, cela peut expliquer le NoClassDefFound.

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    En déclarant la dépendance eclipselink avant l'api jee 6, le problème est résolu. C'est un "défaut" maven.

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

Discussions similaires

  1. Tests unitaires automatisés avec JUnit4
    Par regis1512 dans le forum Tests et Performance
    Réponses: 10
    Dernier message: 25/05/2009, 17h59
  2. [Cactus] Problème avec JUnit4
    Par LUOAR dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 02/04/2009, 12h41
  3. [Cobertura] [Maven] Utilisation de JUnit4
    Par Raphael_Lemaire dans le forum Qualimétrie
    Réponses: 1
    Dernier message: 03/11/2008, 14h23

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