2014-06-21 57 views
1

我在为Hudson中Netbeans开发的项目设置单元测试时遇到了麻烦。到目前为止,哈德森运行良好,监视我的git存储库,并自动启动构建。哈德森的JUnit/Ant:如何在无头模式下开始测试?

但是当建筑完成后,哈德森开始进行单元测试。而这就是问题:一些类使用AWT,并从内部哈德森开始时,测试失败是这样的:

[junit] Testcase: testParse_SimpleTextAndSymbols(com.dua3.util.text.LatexParserTest): Caused an ERROR 
[junit] Can't connect to X11 window server using ':0' as the value of the DISPLAY variable. 
[junit] java.lang.InternalError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable. 
[junit]  at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method) 
[junit]  at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65) 
[junit]  at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:110) 
[junit]  at java.security.AccessController.doPrivileged(Native Method) 
[junit]  at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:74) 
[junit]  at java.lang.Class.forName0(Native Method) 
[junit]  at java.lang.Class.forName(Class.java:190) 
[junit]  at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:102) 
[junit]  at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:81) 
[junit]  at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:119) 
[junit]  at java.lang.Class.forName0(Native Method) 
[junit]  at java.lang.Class.forName(Class.java:190) 
[junit]  at java.awt.Toolkit$2.run(Toolkit.java:868) 
[junit]  at java.security.AccessController.doPrivileged(Native Method) 
[junit]  at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:860) 
[junit]  at sun.swing.SwingUtilities2.getSystemMnemonicKeyMask(SwingUtilities2.java:1877) 
[junit]  at javax.swing.plaf.basic.BasicLookAndFeel.initComponentDefaults(BasicLookAndFeel.java:752) 
[junit]  at javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:434) 
[junit]  at javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:148) 
[junit]  at javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1589) 
[junit]  at javax.swing.UIManager.setLookAndFeel(UIManager.java:536) 
[junit]  at javax.swing.UIManager.setLookAndFeel(UIManager.java:576) 
[junit]  at javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1345) 
[junit]  at javax.swing.UIManager.initialize(UIManager.java:1455) 
[junit]  at javax.swing.UIManager.maybeInitialize(UIManager.java:1422) 
[junit]  at javax.swing.UIManager.getLookAndFeelDefaults(UIManager.java:1034) 
[junit]  at com.dua3.util.graph.javase.swing.SwingFont$SwingFontProvider.getDefaultFont(SwingFont.java:50) 
[junit]  at com.dua3.util.graph.Font.getDefault(Font.java:52) 
[junit]  at com.dua3.util.text.LatexParser$Settings.<init>(LatexParser.java:39) 
[junit]  at com.dua3.util.text.LatexParser.parse(LatexParser.java:61) 
[junit]  at com.dua3.util.text.LatexParserTest.testParse_SimpleTextAndSymbols(LatexParserTest.java:49) 

我认为这应该是足够检查GraphicsEnvironment.isHeadless(),但显然事实并非如此。这是代码片段是它出错:

  • 设置Java选项-Djava.awt.headless=true“构建”部分

  • 中输入一个:

    if(!GraphicsEnvironment.isHeadless()) { 
        final UIDefaults lookAndFeelDefaults = UIManager.getLookAndFeelDefaults(); // SwingFont.java:50 
        if (lookAndFeelDefaults!=null) { 
         swingFont = lookAndFeelDefaults.getFont("defaultFont"); 
        } 
    } 
    

    我在哈德森以下尝试生成属性中的“java.awt.headless = true”行

所有这些都不起作用。看起来这些只是传递给ant,但在调用java来运行JUnit测试时不会向前传递。

有什么办法告诉蚂蚁我想让我的测试在无头模式下运行?

回答

1

我花了一些时间寻找这个,最后找到了answer。简而言之:在linux上设置java.awt.headless=true是不够的。您必须取消设置DISPLAY。因此,请转至“管理Hudson”,“配置系统”,确保在“全局属性”下选中“环境变量”并添加一个名称为DISPLAY的新变量(值栏位留空)。