2017-12-11 115 views
6

Tôi đang phát triển một thử nghiệm đơn vị phụ thuộc vào một cá thể JFX để chạy, nhưng khi Bitbucket thực hiện kiểm tra nó không thành công khi khởi tạo JFXPanel. Tại sao Bitbucket không thể xây dựng dự án JFX của tôi?

Đây là tôi bitbucket-đường ống:

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 

Các @BeforeClass chạy JFXPanel:

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

tôi có thể xây dựng dự án của tôi không có vấn đề trên máy tính của tôi, nhưng không thể Bitbucket .

Bitbucket log kiểm tra:

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) 

tôi không tìm thấy một ai đó mà có cùng một vấn đề. Các vấn đề tương tự như xây dựng không thành công trên bitbucket nói rằng nó có thể là đường dẫn mà thiếu một số lệnh.

Trả lời

9

Bitbucket chỉ cung cấp headless test environment không có màn hình đồ họa. Bạn nhận được ngoại lệ java.lang.UnsupportedOperationException: Unable to open DISPLAY vì JavaFX không hỗ trợ môi trường không đầu theo mặc định.

Bạn phải cài đặt và định cấu hình triển khai không đầu của thành phần cửa sổ kính của JavaFX, như dự án Monocle của OpenJFX. Monocle phụ thuộc rất nhiều vào phiên bản OpenJDKOpenJFX. Đôi khi bạn phải áp dụng các bản vá lỗi cho Monocle để làm cho nó hoạt động. Xem OpenJFX wiki - MonocleGithub - Monocle.

Để biết thêm thông tin, hãy xem JEROME'S BLOG - Testing JavaFX in headless mode và/hoặc Uwe's Blog - Headless UI Testing with TestFX and JavaFX 8.

Các vấn đề liên quan