2017-12-11 111 views
6

मैं एक यूनिट परीक्षण विकसित कर रहा हूं जो चलाने के लिए एक जेएफएक्स उदाहरण पर निर्भर करता है, लेकिन जब बिटबकेट परीक्षण निष्पादित करता है तो यह जेएफएक्स पैनेल शुरू करने में विफल रहता है।बिटबकेट क्यों मेरी जेएफएक्स परियोजना नहीं बना सकता है?

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 कि JFXPanel चलाएँ::

यह मेरा bitbucket-पाइपलाइनों है

@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) 

मैं किसी को है कि एक ही समस्या थी नहीं मिला। बिटबकेट पर असफल निर्माण जैसी ही समस्याएं कहती हैं कि यह पाइपलाइन हो सकती है जिसमें कुछ कमांड गुम हो गया है।

उत्तर

9

बिटबकेट केवल headless test environment प्रदान करता है जिसमें कोई ग्राफिकल डिस्प्ले नहीं है। आपको अपवाद java.lang.UnsupportedOperationException: Unable to open DISPLAY मिलता है क्योंकि जावाएफएक्स डिफ़ॉल्ट रूप से हेडलेस वातावरण का समर्थन नहीं करता है।

आपको जावाएफएक्स के ग्लास विंडोिंग घटक, जैसे OpenJFX की Monocle प्रोजेक्ट की एक हेडलेस कार्यान्वयन को स्थापित और कॉन्फ़िगर करना होगा। MonocleOpenJDK और OpenJFX के संस्करण पर भारी निर्भर करता है। कभी-कभी आपको इसे काम करने के लिए 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 देखें।

संबंधित मुद्दे