2017-12-11 216 views
6

Çalıştırmak için bir JFX örneğine bağlı bir birim sınaması geliştiriyorum, ancak Bitbucket testi yürütürken JFXPanel'i başlatırken başarısız oluyor. JFXPanel çalıştırmakNeden Bitbucket JFX projemi oluşturamıyor?

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 

@BeforeClass:

Bu benim bitbucket-boru hatları ise Bilgisayarımda hiç sorun projemi inşa edebilirsiniz

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

ama Bitbucket yapamaz .

Bitbucket testi günlüğü: Ben de aynı sorun vardı birisi bulamadık

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'te yapılamada başarısızlık gibi benzer sorunlar, bazı komutların eksik olduğu bir boru hattı olabileceğini söylüyor.

cevap

9

Bitbucket hiçbir grafik göstergeli headless test environment sağlar. java.lang.UnsupportedOperationException: Unable to open DISPLAY istisnasını elde edersiniz, çünkü JavaFX varsayılan olarak başsız ortamları desteklemez.

OpenJFX'in Monocle projesi gibi, JavaFX'in Cam pencere kaplama bileşeni'un başlıksız bir uygulamasını yüklemeniz ve yapılandırmanız gerekir. Monocle, OpenJDK ve OpenJFX sürümlerine büyük ölçüde bağımlıdır. Bazen çalışmasını sağlamak için Monocle yamaları uygulamanız gerekir. Bkz OpenJFX wiki - Monocle ve Github - Monocle.

Daha fazla bilgi için, bkz. JEROME'S BLOG - Testing JavaFX in headless mode ve/veya Uwe's Blog - Headless UI Testing with TestFX and JavaFX 8.