Précédent   Forum du club des développeurs et IT Pro > Java > EDI et OUTILS pour Java > Tests et Performance
Tests et Performance Vos questions sur les APIs et Outils de tests unitaires, d'intégration, de performance, profiling, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/01/2013, 18h23   #1
ruddy32
Invité de passage
 
Inscription : juin 2009
Messages : 33
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 33
Points : 3
Points : 3
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 :
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 :
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 :
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
ruddy32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 11h45   #2
ruddy32
Invité de passage
 
Inscription : juin 2009
Messages : 33
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 33
Points : 3
Points : 3
J'ai également une autre erreur sur un autre fichier source :
Code :
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.
ruddy32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 16h39   #3
olivier.pitton
Membre éprouvé
 
Avatar de olivier.pitton
 
Homme olivier pitton
Étudiant
Inscription : juin 2012
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme olivier pitton
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2012
Messages : 213
Points : 444
Points : 444
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.
olivier.pitton est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 16h54   #4
ruddy32
Invité de passage
 
Inscription : juin 2009
Messages : 33
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 33
Points : 3
Points : 3
En déclarant la dépendance eclipselink avant l'api jee 6, le problème est résolu. C'est un "défaut" maven.
ruddy32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h03.


 
 
 
 
Partenaires

Hébergement Web