मैं जुनीट परीक्षण चलाने के लिए LibGDX headless backend का उपयोग कर रहा हूं। यह कुछ परीक्षणों के लिए अच्छा काम करता है, लेकिन अगर मैं new Texture('myTexture.png');
बनाने का प्रयास करता हूं, तो मुझे एक NullPointerException मिलता है। सटीक त्रुटि है:हेडलेस लिबडएक्स यूनिट परीक्षणों में बनावट बनाना
java.lang.NullPointerException
at com.badlogic.gdx.graphics.GLTexture.createGLHandle(GLTexture.java:207)
...
इसे आसान बनाने के लिए, मैं एक विधि है कि अन्य की तुलना में एक बनावट लोड कुछ नहीं करता है बनाया:
public class TextureLoader {
public Texture load(){
return new Texture("badlogic.jpg");
}
}
फिर, अपने परीक्षण वर्ग इस तरह दिखता है:
public class TextureTest {
@Before
public void before(){
final HeadlessApplicationConfiguration config = new HeadlessApplicationConfiguration();
new HeadlessApplication(new ApplicationListener() {
// Override necessary methods
...
}, config);
}
@Test
public void shouldCreateTexture() {
TextureLoader loader = new TextureLoader();
assertNotNull(loader.load());
}
}
यह विधि मेरे वास्तविक ऐप में सही ढंग से काम कर रही है, न केवल यूनिट परीक्षणों में।
मैं बनावट लोड करने के लिए HeadlessApplication
कक्षा का उपयोग कैसे कर सकता हूं?
देखना libgdx बनावट वर्ग मूल रूप से एक ओपनजीएल बनावट हैंडल लपेटता है। हेडलेस बैकएंड में ओपनजीएल संदर्भ नहीं है (इसलिए "हेडलेस")। आप OpenGL संदर्भ के बिना ओपनजीएल बनावट हैंडल नहीं बना सकते हैं। – Xoppa
ठीक है, यह समझ में आता है। मुझे लगता है कि यह एक सामान्य जावा प्रश्न का अधिक है, लेकिन क्या आप यूनिट परीक्षणों में इसे संभालने के लिए एक अच्छा तरीका जानते हैं? निर्भरता इंजेक्शन का उपयोग किया जा सकता है, लेकिन पैरामीटर के रूप में प्रत्येक बनावट में गुजरने से गन्दा लगता है। – twiz
अभी के लिए, मैंने हेडलेस बैकएंड के बजाय lwjgl का उपयोग करके मेरी समस्या हल कर ली है। यह काउंटर-अंतर्ज्ञानी लगता है, क्योंकि मुझे लगता है कि इकाई परीक्षण एक हेडलेस बैकएंड के अस्तित्व के लिए मुख्य उद्देश्य है। मैं समझता हूं कि एक वास्तविक हेडलेस ओपनजीएल कार्यान्वयन व्यर्थ होगा, लेकिन अपवादों को रोकने के लिए एडीआई के नकली संस्करण को रखने के लिए हेडलेस बैकएंड के लिए यह समझ में नहीं आता? – twiz