java - मॉकिटो स्थिर तरीकों का नकल क्यों नहीं करता है?




methods static (4)

मैंने यहां स्थिर तरीकों के बारे में कुछ धागे पढ़े हैं, और मुझे लगता है कि मैं समझता हूं कि समस्याओं का दुरुपयोग / स्थैतिक तरीकों के अत्यधिक उपयोग के कारण हो सकता है। लेकिन मैं वास्तव में नीचे नहीं पहुंच पाया कि स्थिर तरीकों का नकल करना मुश्किल क्यों है।

मैं पावरमोक की तरह अन्य मॉकिंग फ्रेमवर्क जानता हूं, ऐसा कर सकता है लेकिन मॉकिटो क्यों नहीं कर सकता?

मैंने इस लेख को पढ़ा है, लेकिन लेखक धार्मिक शब्द के खिलाफ धार्मिक रूप से प्रतीत होता है, शायद यह मेरी खराब समझ है।

एक आसान स्पष्टीकरण / लिंक बहुत अच्छा होगा।


कुछ मामलों में, स्थैतिक तरीकों का परीक्षण करना मुश्किल हो सकता है, विशेष रूप से यदि उन्हें मजाक करने की आवश्यकता होती है, यही कारण है कि अधिकांश मॉकिंग ढांचे का समर्थन नहीं करते हैं। मैंने this ब्लॉग पोस्ट को स्थिर तरीकों और कक्षाओं को नकल करने के तरीके को निर्धारित करने में बहुत उपयोगी पाया।


मुझे गंभीरता से लगता है कि अगर आपको स्थैतिक तरीकों का नकल करने की ज़रूरत है तो यह कोड गंध भी है।

  • सामान्य कार्यक्षमता तक पहुंचने के लिए स्टेटिक विधियां? -> एक सिंगलटन उदाहरण का प्रयोग करें और उसे इंजेक्ट करें
  • तीसरा पक्ष कोड? -> इसे अपने स्वयं के इंटरफ़ेस / प्रतिनिधि में लपेटें (और यदि आवश्यक हो तो इसे सिंगलटन भी बनाएं)

यह एकमात्र ऐसा समय है जो मुझे लगता है, गुवा की तरह libs है, लेकिन आपको इस तरह का नकल करने की आवश्यकता नहीं है क्योंकि यह तर्क का हिस्सा है ... (Iterables.transform (..) जैसी चीजें)
इस तरह आपका अपना कोड साफ रहता है, आप अपनी सभी निर्भरताओं को एक साफ तरीके से नकल कर सकते हैं, और आपके पास बाहरी निर्भरताओं के खिलाफ भ्रष्टाचार विरोधी भ्रष्टाचार है। मैंने अभ्यास में पावरमैक देखा है और जिन वर्गों की हमें आवश्यकता है, वे खराब डिजाइन किए गए थे। इसके अलावा पावरमैक के एकीकरण ने गंभीर समस्याओं का कारण बना दिया
(उदाहरण के लिए https://code.google.com/p/powermock/issues/detail?id=355 )

पीएस: निजी तरीकों के लिए भी यही है। मुझे नहीं लगता कि परीक्षण निजी तरीकों के विवरण के बारे में जानना चाहिए। यदि कोई वर्ग इतना जटिल है कि यह निजी तरीकों से बाहर निकलने का प्रयास करता है, तो शायद यह उस वर्ग को विभाजित करने का संकेत है ...


मॉकिटो ऑब्जेक्ट्स लौटाता है लेकिन स्थैतिक माध्यम "क्लास लेवल, ऑब्जेक्ट लेवल नहीं" तो मॉकिटो स्थैतिक के लिए शून्य पॉइंट अपवाद देगा।


यदि आपको एक स्थिर विधि का नकल करने की आवश्यकता है, तो यह खराब डिजाइन के लिए एक मजबूत संकेतक है। आम तौर पर, आप अपने वर्ग-अंडर-टेस्ट की निर्भरता का नकल करते हैं। यदि आपका क्लास-अंडर-टेस्ट एक स्थैतिक विधि को संदर्भित करता है - उदाहरण के लिए java.util.Math # पाप - इसका मतलब है कि कक्षा-अंडर-टेस्ट को वास्तव में इस कार्यान्वयन की आवश्यकता है (उदाहरण के लिए सटीकता बनाम गति)। यदि आप एक ठोस साइनस कार्यान्वयन से अमूर्त करना चाहते हैं तो आपको शायद एक इंटरफेस की आवश्यकता है (आप देखते हैं कि यह कहां जा रहा है)?







mockito