在非ui线程中运行Eclipse插件测试

时间:2009-09-29 21:00:29

标签: eclipse junit eclipse-pde

从命令行运行测试时,如何在非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)

3 个答案:

答案 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-testcore-test来运行测试。

祝你好运!

答案 2 :(得分:0)

显然,org.eclipse.pde.junit.runtime.nonuithreadtestapplication需要专门的测试结果监听器。如何执行此操作在this article中进行了描述。