【发布时间】:2010-09-20 02:09:02
【问题描述】:
我需要在一组 eclipse 插件测试中使用 JUnit 4.4(或更新版本),但我遇到了以下问题:
使用 springsource 的 junit 4.4 或 4.5 包运行时未检测到测试 (junit44 和 junit45)。可以用 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 版本)。
【问题讨论】:
-
我有完全相同的问题,我似乎无法找到任何有关原因的见解。显然,其他人也没有:(
-
现在我已经回到了 junit 4.3(和早期版本的 jmock)。我认为下一步可能是向 Spring Source 报告有关其捆绑包的错误,和/或尝试创建新的 junit 4.4 捆绑包以查看捆绑包或 junit 是否存在问题。
-
这将在未回答问题队列的顶部停留多长时间?
-
啊,我(终于)想出了如何让这个社区可编辑...我没有时间评估下面的建议,所以如果有人可以,至少他们现在可以将这些信息正确地放入问题中(如果需要,我可以授予接受的答案——我不确定社区问题如何处理接受的答案)
-
遇到了同样的问题。添加此行(如上所示)对我有用:
Require-Bundle: org.junit4;bundle-version="4.3.1"
标签: java eclipse unit-testing junit eclipse-pde