2010-09-30 82 views
1

我有Eclipse插件和junit测试,它使用jMock库。如何使用JMock运行JUnit Eclipse插件测试?

当我运行测试'作为junit'时,所有测试都正常运行。但是当我运行它们'作为JUnit插件测试'我得到以下错误:

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 

如何解决这个问题? 感谢任何帮助。

回答

2

我修复了它。 JMock的插件,这是我最初创建,是以下几点:

的plugin.xml:

​​3210

我。即它只是我的类路径中的一个库。我把它改成如下: 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 

现在的Eclipse OSGI类加载器能够加载我JMockPlugin和我没有任何问题。

相关问题