2017-12-11 11 views
6

実行するJFXインスタンスに依存する単体テストを開発していますが、Bitbucketがテストを実行するときにJFXPanelを初期化すると失敗します。 Bitbucketが私のJFXプロジェクトを構築できないのはなぜですか?

これは私のビットバケット、パイプラインである:

pipelines: 
    default: 
    - step: 
     caches: 
      - maven 
     script: # Modify the commands below to build your repository. 
      - apt-get update && apt-get install -y openjfx 

      - mvn install:install-file -Dfile=lib/builder.jar -DgroupId=builder -DartifactId=builder 
      -Dversion=1.0 -Dpackaging=jar 

      - mvn clean test 

JFXPanelを実行@BeforeClass

@BeforeClass 
public static void setup() { 
    new JFXPanel(); 
} 

私は自分のコンピュータ上問題のない私のプロジェクトをビルドすることができますが、のBitbucketはできません。

のBitbucketのテストログ:私は同じ問題を抱えていた誰かを見つけられませんでした

T E S T S 
------------------------------------------------------- 
Running com.abc.suapp.model.QuickCommandsTest 
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.045 sec 
Running com.abc.suapp.model.DeviceTest 
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec 
Running com.abc.suapp.factory.SystraceFactoryTest 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.224 sec <<< FAILURE! 
com.abc.suapp.factory.SystraceFactoryTest Time elapsed: 0.223 sec <<< ERROR! 
java.lang.UnsupportedOperationException: Unable to open DISPLAY 
    at com.sun.glass.ui.gtk.GtkApplication.<init>(GtkApplication.java:68) 
    at com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(GtkPlatformFactory.java:41) 
    at com.sun.glass.ui.Application.run(Application.java:146) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:257) 
    at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:211) 
    at javafx.embed.swing.JFXPanel.initFx(JFXPanel.java:215) 
    at javafx.embed.swing.JFXPanel.<init>(JFXPanel.java:230) 
    at com.abc.suapp.factory.SystraceFactoryTest.setup(SystraceFactoryTest.java:25) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    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:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    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) 

。 bitbucketに失敗したビルドのような同様の問題は、それがいくつかのコマンドを欠いているパイプラインになる可能性があると言います。

答えて

9

Bitbucketはグラフィックディスプレイのないheadless test environmentしか提供していません。デフォルトでは、JavaFXはヘッドレス環境をサポートしていないため、例外java.lang.UnsupportedOperationException: Unable to open DISPLAYが発生します。

OpenFFSのMonocleプロジェクトのように、JavaFXのガラスウィンドウコンポーネントのヘッドレス実装をインストールして設定する必要があります。 Monocleは、OpenJDKOpenJFXのバージョンに大きく依存しています。パッチを適用するには、Monocleにパッチを適用する必要があります。 OpenJFX wiki - MonocleおよびGithub - Monocleを参照してください。

詳細については、JEROME'S BLOG - Testing JavaFX in headless modeおよび/またはUwe's Blog - Headless UI Testing with TestFX and JavaFX 8を参照してください。

関連する問題