2012-09-21 23 views
3

我有一些最近失敗的測試,原因如下:沒有設置X11 DISPLAY變量,但是這個程序執行了一個需要它的操作。沒有設置X11 DISPLAY變量,但是這個程序執行了一個需要它的操作

下面是完整的堆棧跟蹤:

testGetDialog(simple.marauroa.application.core.IAddApplicationDialogProviderTest) Time elapsed: 112 sec <<< ERROR! 
java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it. 
    at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159) 
    at java.awt.Window.<init>(Window.java:431) 
    at java.awt.Frame.<init>(Frame.java:403) 
    at java.awt.Frame.<init>(Frame.java:368) 
    at javax.swing.SwingUtilities$SharedOwnerFrame.<init>(SwingUtilities.java:1733) 
    at javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1810) 
    at javax.swing.JDialog.<init>(JDialog.java:253) 
    at javax.swing.JDialog.<init>(JDialog.java:187) 
    at javax.swing.JDialog.<init>(JDialog.java:135) 
    at simple.marauroa.application.core.IAddApplicationDialogProviderTest$IAddApplicationDialogProviderImpl.getDialog(IAddApplicationDialogProviderTest.java:97) 
    at simple.marauroa.application.core.IAddApplicationDialogProviderTest.testGetDialog(IAddApplicationDialogProviderTest.java:49) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) 
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) 

在代碼中提到的線就是這樣的:

return new JDialog(); 

我猜是關係到詹金斯環境沒有啓用的東西。這如何得到解決?

我可以禁用該測試,但爲什麼我應該?

回答

8

您需要使用XVNC(或XVFB)在虛擬(無頭)圖形環境中運行構建。請參閱wiki.cloudbees.com/bin/view/DEV/Testing+GUI+applications


編輯20/01/2016:

上面的鏈接不再帶你到相關信息的頁面。此鏈接顯示當時的頁面:https://web.archive.org/web/20120717015714/http://wiki.cloudbees.com/bin/view/DEV/Testing+GUI+applications

+0

這個伎倆! – javydreamercsw

+1

該鏈接現在是https://documentation.cloudbees.com/docs/dev-at-cloud/CI_Testing_GUI_Applications.html – vorburger

1

您可能還會考慮重構代碼以使用模擬服務,以便測試不需要加載AWT。這可能會使測試更快,更可靠,並且可以最大限度地減少在CI服務器等新環境中出現故障的可能性。

相關問題