2010-09-30 15 views
1

J'ai un plug-in Eclipse et des tests junit qui utilisent la bibliothèque jMock. Quand j'exécute mon test 'comme junit', tous les tests fonctionnent correctement. Mais quand je les lance « comme test de plugin JUnit » Je reçois l'erreur suivante:Comment exécuter les tests JUnit Eclipse Plugin avec JMock?

java.lang.TypeNotPresentException: Type [unknown] not present 
at sun.reflect.annotation.TypeNotPresentExceptionProxy.generateException(TypeNotPresentExceptionProxy.java:27) 
at sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:56) 
at $Proxy4.value(Unknown Source) 
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24) 
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.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:29) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:40) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:30) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:62) 
at org.eclipse.pde.internal.junit.runtime.UITestApplication$1.run(UITestApplication.java:114) 
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) 
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) 
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3468) 
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3115) 
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) 
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) 
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) 
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) 
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) 
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113) 
at org.eclipse.pde.internal.junit.runtime.UITestApplication.start(UITestApplication.java:46) 
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 
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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) 
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) 
at org.eclipse.equinox.launcher.Main.run(Main.java:1311) 
at org.eclipse.equinox.launcher.Main.main(Main.java:1287) 
Caused by: java.lang.NoClassDefFoundError: org/junit/internal/runners/JUnit4ClassRunner 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:183) 
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:576) 
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:546) 
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:477) 
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:465) 
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:445) 
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:211) 
at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:376) 
at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:33) 
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:449) 
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:405) 
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:393) 
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:247) 
at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:95) 
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107) 
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31) 
at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:370) 
at sun.reflect.annotation.AnnotationParser.parseClassValue(AnnotationParser.java:351) 
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:280) 
at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:222) 
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69) 
at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52) 
at java.lang.Class.initAnnotationsIfNecessary(Class.java:3070) 
at java.lang.Class.getAnnotation(Class.java:3029) 
at org.junit.internal.builders.IgnoredBuilder.runnerForClass(IgnoredBuilder.java:13) 
... 39 more 
Caused by: java.lang.ClassNotFoundException: org.junit.internal.runners.JUnit4ClassRunner 
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:489) 
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:405) 
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:393) 
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
... 70 more 

Comment résoudre ce problème? Appréciez toute aide.

Répondre

2

Je l'ai corrigé. plug-in JMock, que je initialement créé, était la suivante:

plugin.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.0"?> 
<plugin 
id="jmock-2.5.1" 
name="JMockClasses Plug-in" 
version="1.0.0" 
provider-name=""> 

<runtime> 
    <library name="bsh-core-2.0b4.jar"> 
    <export name="*"/> 
    </library> 
    <library name="cglib-2.1_3-src.jar"> 
    <export name="*"/> 
    </library> 
    ... 
    <library name="jmock-2.5.1.jar"> 
    <export name="*"/> 
    </library>  
    <library name="jmock-junit4-2.5.1.jar"> 
    <export name="*"/> 
    </library> 
    ... 
</runtime> 
<requires> 
    <import plugin="org.eclipse.core.runtime.compatibility"/> 
</requires> 


</plugin> 

i. e. c'était juste une bibliothèque sur mon chemin de classe. Je l'ai changé à ce qui suit: META-INF/MANIFEST.MF:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: JMockPlugin 
Bundle-SymbolicName: org.jmock_2.5.1 
Bundle-Version: 1.0.0.qualifier 
Bundle-Activator: jmock.Activator 
Require-Bundle: org.eclipse.ui, 
org.eclipse.core.runtime, 
org.junit4 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
Bundle-ActivationPolicy: lazy 
Bundle-ClassPath: bsh-core-2.0b4.jar, 
cglib-2.1_3-src.jar, 
cglib-nodep-2.1_3.jar, 
hamcrest-core-1.1.jar, 
hamcrest-library-1.1.jar, 
jmock-2.5.1.jar, 
jmock-junit3-2.5.1.jar, 
jmock-junit4-2.5.1.jar, 
jmock-legacy-2.5.1.jar, 
jmock-script-2.5.1.jar, 
objenesis-1.0.jar 

maintenant Eclipse OSGI classloader est capable de charger mon JMockPlugin et je n'ai aucun problème.