我需要在一组eclipse插件测试中使用JUnit 4.4(或更新版本),但我遇到了以下问题:
使用springsource(junit44和junit45)中的junit 4.4或4.5 bundle运行时,未检测到测试.可以使用eclipse获得的org.junit4包提供junit 4.3(从Ganymead/Eclipse 3.4开始).org.junit4包确实可以识别并运行测试,但它与最新版本的JMock不兼容,我需要使用模拟库.
这是一个示例测试:
package testingplugin; import static org.junit.Assert.*; import org.junit.Test; public class ActivatorTest { @Test public final void testDoaddTest() { fail("Not yet implemented"); } }
运行此测试时,我收到以下异常:
java.lang.Exception: No runnable methods at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:33) at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:62) at org.eclipse.pde.internal.junit.runtime.CoreTestApplication.run(CoreTestApplication.java:23) 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.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:574) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:195) 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:382) 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:549) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504) at org.eclipse.equinox.launcher.Main.run(Main.java:1236) at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
但是,如果我将项目依赖项从com.springsource.org.junit切换到org.junit4,则测试运行并失败(如预期的那样).
我在Eclipse中运行测试作为JUnit插件测试,具有以下程序参数:
-os $ {target.os} -ws $ {target.ws} -arch $ {target.arch} -nl $ {target.nl}
在启动期间选择了以下插件(由我选择,然后我使用"添加必需的插件"来获取其余的依赖项.):
Workspace: testingPlugin Target Platform: com.springsource.org.hamcrest.core (1.1.0) com.springsource.org.junit (4.5.0) ....and a bunch of others... (nothing related to testing was auto-selected)
这是我的MANIFEST.MF:
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: TestingPlugin Plug-in Bundle-SymbolicName: testingPlugin Bundle-Version: 1.0.0 Bundle-Activator: testingplugin.Activator Import-Package: org.osgi.framework;version="1.3.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Require-Bundle: com.springsource.org.junit;bundle-version="4.5.0"
将最后一行切换为:
Require-Bundle: org.junit4;bundle-version="4.3.1"
并在启动时将选定的插件更新为:
Workspace: testingPlugin Target Platform: org.junit4 (4.3.1) ...bunches of auto-selected bundles... (again, nothing else test related)
使测试正常运行(但使用错误的junit版本).