我有一些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的方式有什么问题吗?它在我的本地机器上执行时起作用
答案 0 :(得分:0)
你使用Display的方式看起来不错。该错误可能与您的服务器未运行Gnome的事实有关,因此当您要求时,SWT无法创建显示。
<强>更新强>
我刚刚发现了一篇最近的博客文章,其中详细解释了您需要对run SWT UI tests on a headless server做些什么。虽然提供的步骤适用于Hudson,但它们也适用于Jenkins。
应该归结为这两个步骤:
检查在构建期间运行Xvnc (并且无需检查截屏,它不起作用)
- 启动测试之前添加执行shell 构建操作
在使用 metacity -replace -sm-disable&amp;
请参阅链接的博客文章,了解截图和更多详细信息。
答案 1 :(得分:0)
您可以尝试以下两件事,
从你的终端执行命令“xhost”或“xhost +”。
从jenkins终端执行命令“xhost”或“xhost +”。