从命令行运行测试时,如何在非ui线程中运行Eclipse JUnit插件测试?在启动配置对话框中,我可以取消选中“在UI线程中运行”复选框,但是如何在命令行上运行插件测试时这样做?
编辑:似乎org.eclipse.pde.junit.runtime.nonuithreadtestapplication
是PDE启动在非UI线程中运行测试时使用的,但是当我尝试使用它时,我得到“参数'-port'未找到”:< / p>
Loading logger configuration: c:\work\dev\tooticki\core\ide\eclipse\plugins\com.iar.ide.tests\logging.properties 23:42:51,349 [main ] INFO ew - Starting application: class com.iar.ew.Application Exception in thread "WorkbenchTestable" java.lang.IllegalArgumentException: Error: parameter '-port' not specified at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:303) at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.init(RemotePluginTestRunner.java:83) at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:61) at org.eclipse.pde.internal.junit.runtime.NonUIThreadTestApplication.runTests(NonUIThreadTestApplication.java:23) at org.eclipse.ui.internal.testing.WorkbenchTestable$1.run(WorkbenchTestable.java:71) at java.lang.Thread.run(Thread.java:619)
答案 0 :(得分:1)
当你说从命令行运行测试时,你的意思是调用PDE ant目标吗?
运行PDE测试的ant任务有两个目标,核心测试和 ui-test ,分别用于无头测试和UI测试。 Eclipse Test Framework上有一篇关于更多细节的文章,但基本上你可以选择相关的目标,只要你的测试代码不需要访问你的测试将在核心测试目标下运行的UI。您也可以找到这个Eclipse Corner article on PDE and Ant有用的
如果您通过其他方式调用测试。您仍然可以查看PDE ant任务的source,了解他们如何设置环境
答案 1 :(得分:1)
创建一个从org.eclipse.pde.internal.junit.runtime.UITestApplication扩展的新应用程序类:
public class NonUIThreadTestApplication extends UITestApplication {
public void runTests() {
fTestableObject.testingStarting();
try {
EclipseTestRunner.run(Platform.getCommandLineArgs());
} catch (IOException e) {
e.printStackTrace();
}
fTestableObject.testingFinished();
}
}
我认为由于依赖性限制,您必须将Eclipse中的EclipseTestRunner从org.eclipse.test插件复制到您的插件中。
在plugin.xml中添加一个新应用程序:
<extension
id="nonuithreadtestapplication"
point="org.eclipse.core.runtime.applications">
<application visible="false">
<run class="com.my.test.NonUIThreadTestApplication" />
</application>
</extension>
在org.eclipse.test / library.xml中添加一个新部分:
<target name="nonui-thread-ui-test" description="Eclipse application used to launch UI plugin tests in a non-UI thread." depends="init">
<antcall target="${launchTarget}">
<param name="application" value="com.my.test.nonuithreadtestapplication" />
</antcall>
</target>
完成此操作后,您可以使用nonui-thread-ui-test
目标而不是ui-test
或core-test
来运行测试。
答案 2 :(得分:0)
显然,org.eclipse.pde.junit.runtime.nonuithreadtestapplication
需要专门的测试结果监听器。如何执行此操作在this article中进行了描述。