在Jenkins上运行使用SWT-Display的JUnit-Tests失败

时间:2011-12-09 18:43:40

标签: swt jenkins

我有一些JUnit-Tests使用当前的Display实例化一些控件(例如TreeViewer)。在当地工作正常,没问题。当我提交这些测试并且jenkins运行测试时,我对每个使用Display的测试都进行了测试失败。

我的单元测试以这种方式使用显示变量:

@Test
public void testUtils() {
    Display display = Display.getCurrent();
    Shell shell = new Shell(display, SWT.NONE);
    // org.eclipse.swt.widgets.Composite composite = new
    // org.eclipse.swt.widgets.Composite(
    // shell, SWT.NONE);
    TreeViewer viewer = new TreeViewer(shell, SWT.MULTI | SWT.H_SCROLL
            | SWT.V_SCROLL);

jenkins生成的错误日志是:

Time elapsed: 0.13 sec  <<< ERROR!
org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]
    at org.eclipse.swt.SWT.error(SWT.java:4109)
    at org.eclipse.swt.widgets.Display.createDisplay(Display.java:902)
    at org.eclipse.swt.widgets.Display.create(Display.java:890)
    at org.eclipse.swt.graphics.Device.<init>(Device.java:154)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:499)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:490)
    at org.eclipse.swt.widgets.Display.getDefault(Display.java:1693)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:260)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:253)
    at 

我在测试中使用Display的方式有什么问题吗?它在我的本地机器上执行时起作用

2 个答案:

答案 0 :(得分:0)

你使用Display的方式看起来不错。该错误可能与您的服务器未运行Gnome的事实有关,因此当您要求时,SWT无法创建显示。

<强>更新

我刚刚发现了一篇最近的博客文章,其中详细解释了您需要对run SWT UI tests on a headless server做些什么。虽然提供的步骤适用于Hudson,但它们也适用于Jenkins。

应该归结为这两个步骤:

  
      
  • 检查在构建期间运行Xvnc (并且无需检查截屏,它不起作用)

  •   
  • 在使用 metacity -replace -sm-disable&amp;

  • 启动测试之前添加执行shell 构建操作   

请参阅链接的博客文章,了解截图和更多详细信息。

答案 1 :(得分:0)

您可以尝试以下两件事,

  1. 从你的终端执行命令“xhost”或“xhost +”。

  2. 从jenkins终端执行命令“xhost”或“xhost +”。