18

我正在为我正在处理的项目对一些 SWT 和 Swing 代码进行单元测试,只要我从 Eclipse 运行它们,测试就可以正常运行。

一旦我在我的 hudson 环境中运行它们,它就会失败,因为 hudson 在无头模式下运行测试。

这样做的最佳方法是什么?请仅提供开源解决方案(因为该项目是开源的)。

4

6 回答 6

26

您可以运行Xvfb(X 虚拟帧缓冲区,一个在内存中执行所有图形操作的 X11 服务器),这工作正常。

但是 Hudson 的 Xvnc 插件还有另一种解决方案。只需安装插件并选中作业配置屏幕中的复选框:

替代文字 http://www.justinedelson.com/blog/wp-content/uploads/xvnc_box.jpg

Hudson 然后会自动启动一个 Xvnc 会话并将 DISPLAY 环境变量设置为适当的值,然后在构建完成时关闭会话。这与 Xvfb 方法相比的一个优点是,如果您同时构建多个 Swing/SWT 项目,则每个构建都有自己的 X 会话。这可能根本不是问题,但似乎是个好主意。

在使用这个插件之前,你显然必须安装 Xvnc。不太明显(尽管明智)的是您还必须设置密码。你可以通过运行:

$ vncpassword

这必须与 Hudson 运行的用户相同。

于 2009-10-16T13:26:37.677 回答
3

试试Abbot Java GUI 测试框架SWTbot。至少 SWTbot应该能够做到

如果两者都没有提供无头模式,那么这篇博文可能会为您提供一些关于如何摆脱 UI 进行测试的想法。

于 2009-10-16T13:26:22.190 回答
2

使用 Swing,我倾向于组织事物,以便可以在顶部没有窗口的情况下创建组件树。这样做可以让您在单元测试中简单地创建一个 JPanel 并将其用作您的顶级组件。有些东西是你无法测试的,例如焦点和创建 Frame 以进行正常操作所涉及的任何逻辑,但绝大多数都可以测试。

您可能想查看 FEST 库以使生活更轻松,无论您是否无头,它看起来都非常好: http: //fest.easytesting.org/swing/wiki/pmwiki.php

于 2009-10-16T16:36:29.060 回答
2

我确定我之前在这里发布过这个,不知道发生了什么。

Cacio 允许无头运行 Swing 应用程序。

http://rkennke.wordpress.com/2011/10/17/cacio-for-ui-testing/

于 2012-04-04T20:41:34.023 回答
1

我不知道 SWT,但是对于 Swing,你不能。窗口(JFrame、JDialog 等)的任何实例化,即使它从未设置为可见,也会在无头模式下(在 JDK 5 上)崩溃。我们所做的不是在无头模式下运行并安装Xvfb来提供窗口,而实际上没有安装真正的窗口系统。

于 2009-10-16T13:25:44.963 回答
1

你可以试试RedDeer测试框架 https://github.com/jboss-reddeer/reddeer

• 支持在 Jenkins CI 环境中运行测试(类似 Hudson)

于 2016-08-17T18:49:33.477 回答