Erreur au lancement d'un test unitaire

Ritchie Nithoo · le 24/10/19 à 15:21

Bonjour, 
Je travaille en version 10.2.

Je suis les informations trouvées à cette page.

J'ai developpé un test unitaire afin de tester un data controller.
J'ai utilisé le tools.jar dans le jdk fourni dans le devPack que j'ai rajouté au class path du projet. 
J'ai également utilisé la classe JcmsTestCase4 pour créer ma classe de test. (Je ne suis pas bien sur si on peut utiliser celle la ou pas, mais la documentation laisse à penser que cela est possible 

J'obtiens l'erreur suivante au lancement de mes tests: 

[ChannelInitServlet] - An exception occured while initializing JCMS. The site is not available.
969: java.lang.Exception: java.lang.NoClassDefFoundError: jxl/read/biff/PasswordException
970: 	at com.jalios.jcms.Channel.initAfterLoad(Channel.java:1526)
971: 	at com.jalios.jcms.ChannelInitServlet.init(ChannelInitServlet.java:130)
972: 	at com.jalios.jcms.test.JcmsTestCaseBootstrapper.initChannel(JcmsTestCaseBootstrapper.java:137)
973: 	at com.jalios.jcms.test.JcmsTestCaseBootstrapper.<clinit>(JcmsTestCaseBootstrapper.java:76)
974: 	at com.jalios.jcms.test.JcmsTestCase4.<clinit>(JcmsTestCase4.java:86)
975: 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
976: 	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
977: 	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
978: 	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
979: 	at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217)
980: 	at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266)
981: 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
982: 	at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
983: 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
984: 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
985: 	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
986: 	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
987: 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
988: 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
989: 	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
990: 	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
991: 	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
992: 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
993: 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
994: 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
995: 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
996: 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
997: Caused by: java.lang.NoClassDefFoundError: jxl/read/biff/PasswordException
998: 	at java.lang.Class.forName0(Native Method)
999: 	at java.lang.Class.forName(Class.java:264)
1000: 	at com.jalios.jcms.fileprocessor.repository.Repository.reloadComponents(Repository.java:295)
1001: 	at com.jalios.jcms.fileprocessor.repository.Repository.<init>(Repository.java:172)
1002: 	at com.jalios.jcms.fileprocessor.processingmanagement.FileProcessorManager.initializeRepositoryFromProperties(FileProcessorManager.java:345)
1003: 	at com.jalios.jcms.fileprocessor.processingmanagement.FileProcessorManager.initAfterStoreLoad(FileProcessorManager.java:87)
1004: 	at com.jalios.jcms.Channel$2.execute(Channel.java:1511)
1005: 	at com.jalios.jcms.Channel$2.execute(Channel.java:1504)
1006: 	at com.jalios.jcms.db.HibernateUtil.executeTransaction(HibernateUtil.java:357)
1007: 	at com.jalios.jcms.Channel.initAfterLoad(Channel.java:1504)
1008: 	... 26 more
1009: Caused by: java.lang.ClassNotFoundException: jxl.read.biff.PasswordException
1010: 	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
1011: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
1012: 	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
1013: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

J'imagine qu'il y a une configuration que j'ai oublié de faire mais je n'arrive pas à trouver laquelle. 

Il est important de noter que j'ai également des warnings concernant la suppression de tables (erreurs à priori lancées par c3p0). Vu que ce ne sont que des warnings, je ne pense pas qu'ils soient liés à mon problème.

Est - ce que quelqu'un aurait déjà eu ce problème ? 

En vous remerciant par avance,

12 pts
Olivier Jaquemet - le 24/10/19 à 15:24
Meilleure réponse

Bonjour,

Le classpath utilisé pour le lancement de votre test unitaire ne doit pas référencer correctement l'ensemble des librairies contenu dans le répertoire WEB-INF/lib/.

Dans le cas précis que vous signalez, c'est très probablement le jar bcpkix-jdk15on-1.59.jar qui est manquant dans votre classpath, mais tous les autres jars doivent être référencés.

#3

C'est bien ce qu'il faut faire. Lors des test unitaires, l'ensemble des dépendances de JPlatform et de ses modules sont succeptibles d'être invoquées. Elles doivent donc être présent dans le classpath à l'exécution.

Olivier Jaquemet · le 24/10/19 à 15:33
#4

D'accord, merci pour votre aide. 

Ritchie Nithoo · le 24/10/19 à 15:34
#5

En fait, le jar jxl-2.6.12.jar provient du Module d'Indexation des documents 5.0

Il ne faut pas oublier de modifier la "user lib" d'Eclipse JCMS_LIBRARY pour inclure les jars ajoutés par les différents modules et l'ajouter au classpath des tests unitaires.

Manuel Bossant · le 25/10/19 à 17:02
8 pts