在无头环境中单元测试SWT和Swing应用程序的最简单方法?

在无头环境中单元测试SWT和Swing应用程序的最简单方法?,swing,junit,swt,headless,Swing,Junit,Swt,Headless,我希望为我正在进行的项目对一些SWT和Swing代码进行单元测试,只要我在eclipse中运行它们,测试就会正常运行 只要我在我的哈德逊环境中运行它们,它就会失败,因为哈德逊以无头模式运行测试 最好的方法是什么?请只使用开源解决方案(因为该项目是开源的)。我不知道SWT,但使用Swing你就不知道了。窗口的任何实例化(JFrame、JDialog等),即使从未设置为visible,也会在headless模式下爆炸(在jdk5上)。我们所做的不是在无头模式下运行,而是在没有安装真正的窗口系统的情况

我希望为我正在进行的项目对一些SWT和Swing代码进行单元测试,只要我在eclipse中运行它们,测试就会正常运行

只要我在我的哈德逊环境中运行它们,它就会失败,因为哈德逊以无头模式运行测试


最好的方法是什么?请只使用开源解决方案(因为该项目是开源的)。

我不知道SWT,但使用Swing你就不知道了。窗口的任何实例化(JFrame、JDialog等),即使从未设置为visible,也会在headless模式下爆炸(在jdk5上)。我们所做的不是在无头模式下运行,而是在没有安装真正的窗口系统的情况下安装以提供窗口功能。

请尝试和。至少是SWTbot

如果两者都不提供headless模式,那么可能会给您一些如何摆脱UI进行测试的想法。

您可以运行(X virtual framebuffer,一个在内存中执行所有图形操作的X11服务器),这工作正常

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

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

在使用这个插件之前,您显然必须安装Xvnc。不太明显(虽然合理)的是,您还必须设置密码。您可以通过运行以下命令来执行此操作:

$ vncpassword

这必须在同一用户Hudson运行时完成。

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


你可能想看看FEST图书馆,让生活更轻松,不管你是不是无头,它看起来很好:

我肯定我以前在这里贴过这个,不知道它发生了什么事

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


您可以尝试RedDeer测试框架


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

该项目现在托管在GitHub上