की मैं एक JUnit (4.10) इकाई परीक्षण com.google.appengine.api.ThreadManager
के लिए निम्न कॉल करता है कि लिखा है बाहर:परीक्षण Google अनुप्रयोग इंजन ThreadManager GAE
ThreadManager.currentRequestThreadFactory();
जब इस परीक्षण रन, मैं एक NullPointerException
पाने के भीतर से फेंके जाने इस currentRequestThreadFactory
विधि:
Caused by: java.lang.NullPointerException
at com.google.appengine.api.ThreadManager.currentRequestThreadFactory(ThreadManager.java:39)
at com.myapp.server.plumbing.di.BaseModule.providesThreadFactory(BaseModule.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
जब मैं ThreadManager
के लिए स्रोत नीचे लाएँ, और लाइन 39 (जो एनपीई का स्रोत है) को देखो, मैं देख रहा हूँ:
public static ThreadFactory currentRequestThreadFactory() {
return (ThreadFactory) ApiProxy.getCurrentEnvironment().getAttributes()
.get(REQUEST_THREAD_FACTORY_ATTR);
}
तो ऐसा लगता है कि ApiProxy.getCurrentEnvironment()
शून्य है, और जब यह getAttribute()
विधि कहा जाता है, तो एनपीई फेंक दिया जाता है। मैं अपने इकाई परीक्षण कोड में कुछ नए प्रिंट बयान उच्च को जोड़कर इस की पुष्टि की है:
if(ApiProxy.getCurrentEnvironment() == null)
System.out.println("Environment is null.");
मैं थोड़ा पता है कि GAE अपनी सभी सेवाओं के लिए "परीक्षण संस्करण" प्रदान करता है, लेकिन करने के लिए नहीं कर पाए हैं ढूंढें (विशेष रूप से) उन्हें कैसे उपयोग करें और उन्हें सेट अप करें। तो मैं पूछता हूं: क्या जीएई ऐसे परीक्षण संस्करण पेश करता है? यदि हां, तो मैं यहां ApiProxy
परीक्षण संस्करण कैसे जोड़ूं? और यदि नहीं, तो मेरे विकल्प क्या हैं? मुझे नहीं लगता कि मैं या तो विधि (ThreadManager#currentRequestThreadFactory
या ApiProxy#getCurrentEnvironment
) का नकल कर सकता हूं क्योंकि वे दोनों स्थिर हैं। अग्रिम में धन्यवाद।
संपादित करें: मुझे लगता है कि appengine-testing.jar
है जो एसडीके के साथ जहाज है। इस जेएआर के अंदर एक ApiProxyLocal.class
है कि मैं मानता हूंApiProxy
का एक संस्करण है जिसका उपयोग जुनीट परीक्षण के दौरान किया जा सकता है, जो एनपीई फेंकने के बिना काम करेगा। अगर ऐसा है (जो मुझे भी यकीन नहीं है), तो सवाल यह है कि: मैं इस परीक्षण के लिए अपने ThreadManager
में इसे कैसे इंजेक्ट कर सकता हूं?
आप पढ़ सकते हैं https://developers.google.com/appengine/docs/java/tools/localunittesting#Introducing_the_Java_Testing_Utilities है? – NamshubWriter
फिर से धन्यवाद - ये परीक्षण JARs (उस आलेख में संदर्भित) मुझे स्थानीय ** servce ** कक्षाओं और विधियों तक पहुंच प्रदान करते हैं, लेकिन 'थ्रेडमेनगर' का परीक्षण संस्करण नहीं ... – IAmYourFaja