我有一个JUnit项目,我需要为它创建一个ant任务和一些测试。测试不应依赖于环境。将要测试的程序使用了许多来自java.awt和javax.swing的图形用户界面相关内容。我尝试过各种设置和修改,但由于某种原因,测试总是死于java.awt.HeadlessException。我已经找到了一个解决这个问题的办法,没有运气-任何帮助都将不胜感激。
(我在CentOS Linux release 7.2.1511 (Core)上使用CentOS Linux release 7.2.1511 (Core))
我已经将下面的代码添加到我的build.xml中:
<target name="test" depends="test-compile">
<junit>
<jvmarg value="-Djava.awt.headless=true"/>
<sysproperty key="java.awt.headless" value="true"/>
<classpath>
<path refid="junit.class.path"/>
<path refid="libs.class.path"/>
<pathelement location="${build.test.path}"/>
</classpath>
<batchtest>
<fileset dir="${build.test.path}">
<include name="**/*Test*"/>
</fileset>
</batchtest>
<formatter type="brief" usefile="false"/>
</junit>
</target>这是JUnit测试的输出:
[junit] Test org.sampleprogram.MyAppTest FAILED
[junit] Testsuite: org.sampleprogram.MySomethingTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.311 sec
[junit]
[junit] Testcase: testSample(org.sampleprogram.MySomethingTest): Caused an ERROR
[junit] null
[junit] java.lang.ExceptionInInitializerError
[junit] at org.sampleprogram.MySomething.initStaticProperties(Unknown Source)
[junit] at org.sampleprogram.MySomething.<clinit>(Unknown Source)
[junit] at org.sampleprogram.MySomethingTest.testSample(Unknown Source)
[junit] Caused by: java.awt.HeadlessException
[junit] at sun.awt.HeadlessToolkit.getMenuShortcutKeyMask(HeadlessToolkit.java:236)
[junit] at org.fife.ui.rtextarea.RTADefaultInputMap.getDefaultModifier(Unknown Source)
[junit] at org.fife.ui.rtextarea.RTADefaultInputMap.<init>(Unknown Source)
[junit] at org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaDefaultInputMap.<init>(Unknown Source)
[junit] at org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaUI.getRTextAreaInputMap(Unknown Source)
[junit] at org.fife.ui.rtextarea.RTextAreaUI.installKeyboardActions(Unknown Source)
[junit] at javax.swing.plaf.basic.BasicTextUI.installUI(BasicTextUI.java:805)
[junit] at org.fife.ui.rtextarea.RTextAreaUI.installUI(Unknown Source)
[junit] at javax.swing.JComponent.setUI(JComponent.java:666)
[junit] at javax.swing.text.JTextComponent.setUI(JTextComponent.java:328)
[junit] at org.fife.ui.rtextarea.RTextAreaBase.setRTextAreaUI(Unknown Source)
[junit] at org.fife.ui.rtextarea.RTextAreaBase.init(Unknown Source)
[junit] at org.fife.ui.rtextarea.RTextArea.init(Unknown Source)
[junit] at org.fife.ui.rsyntaxtextarea.RSyntaxTextArea.init(Unknown Source)
[junit] at org.fife.ui.rtextarea.RTextAreaBase.<init>(Unknown Source)
[junit] at org.fife.ui.rtextarea.RTextArea.<init>(Unknown Source)
[junit] at org.fife.ui.rsyntaxtextarea.RSyntaxTextArea.<init>(Unknown Source)
[junit] at org.sampleprogram.gui.TextArea.<init>(Unknown Source)
[junit] at org.sampleprogram.MyApp.<clinit>(Unknown Source)
[junit]
[junit]
[junit] Test org.sampleprogram.MySomethingTest FAILED如果我将headless在build.xml中更改为false,它仍然会失败,但结果会更改为:
[junit] Testsuite: org.sampleprogram.MyAppTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.471 sec
[junit]
[junit] Testcase: testSample(org.sampleprogram.MyAppTest): Caused an ERROR
[junit] Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
[junit] java.awt.AWTError: Can't connect to X11 window server using ':0.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:115)
[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:264)
[junit] at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:103)
[junit] at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
[junit] at javax.swing.RepaintManager.<clinit>(RepaintManager.java:233)
[junit] at javax.swing.JComponent.repaint(JComponent.java:4792)
[junit] at java.awt.Component.repaint(Component.java:3313)
[junit] at javax.swing.text.JTextComponent.setEditable(JTextComponent.java:1758)
[junit] at javax.swing.text.JTextComponent.<init>(JTextComponent.java:309)
[junit] at javax.swing.JTextArea.<init>(JTextArea.java:204)
[junit] at javax.swing.JTextArea.<init>(JTextArea.java:140)
[junit] at org.fife.ui.rtextarea.RTextAreaBase.<init>(Unknown Source)
[junit] at org.fife.ui.rtextarea.RTextArea.<init>(Unknown Source)
[junit] at org.fife.ui.rsyntaxtextarea.RSyntaxTextArea.<init>(Unknown Source)
[junit] at org.sampleprogram.gui.SampleTextArea.<init>(Unknown Source)
[junit] at org.sampleprogram.MyApp.<clinit>(Unknown Source)
[junit] at org.sampleprogram.MyApp.initStaticProperties(Unknown Source)
[junit] at org.sampleprogram.MyApp.<clinit>(Unknown Source)
[junit] at org.sampleprogram.MyAppTest.testSample(Unknown Source)
[junit]
[junit]
[junit] Test org.sampleprogram.MyAppTest FAILED发布于 2016-04-29 17:12:53
它看起来像是来自sun.awt.HeadlessToolkit的sun.awt.HeadlessToolkit,在无头模式(*)中使用的Toolkit,总是会抛出这个异常:
public int getMenuShortcutKeyMask()
throws HeadlessException {
throw new HeadlessException();
}此方法由org.fife.ui.rtextarea.RTADefaultInputMap调用,因此无法按原样执行测试。
(*)
默认工具包创建 如果名为java.awt.headless的系统属性设置为true,则使用Toolkit的无头实现。使用Toolkit类的getDefaultToolkit()方法创建无头工具箱实例: Toolkit = Toolkit.getDefaultToolkit();
https://stackoverflow.com/questions/36943630
复制相似问题