代码之家  ›  专栏  ›  技术社区  ›  Allain Lalonde

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

  •  13
  • Allain Lalonde  · 技术社区  · 15 年前

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

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

    最好的方法是什么?仅限开源解决方案(因为项目是开源的)。

    6 回复  |  直到 15 年前
        1
  •  26
  •   Pascal Thivent    15 年前

    Xvfb (X virtual framebuffer,一个在内存中执行所有图形操作的X11服务器)并且工作正常。

    alt text http://www.justinedelson.com/blog/wp-content/uploads/xvnc_box.jpg

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

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

    $ vncpassword
    

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

        2
  •  3
  •   Aaron Digulla    15 年前

    Abbot Java GUI Testing Framework SWTbot . 至少是SWTbot should be able to do it

    如果两者都不提供无头模式,则 this blog post 可能会给你一些关于如何摆脱UI进行测试的想法。

        3
  •  2
  •   Russ Hayward    15 年前

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

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

        4
  •  1
  •   Yishai    15 年前

    Xvfb 在没有安装真正的窗口系统的情况下提供窗口。

        5
  •  1
  •   Glen    12 年前

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

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

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

        6
  •  1
  •   brunocrt    8 年前

    雷德尔 https://github.com/jboss-reddeer/reddeer

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