2013-08-21 10 views
30

मैं GHUnit का उपयोग करता हूं। मैं इकाई को निजी तरीकों का परीक्षण करना चाहता हूं और उन्हें नहीं पता कि उन्हें कैसे परीक्षण किया जाए। मुझे निजी तरीकों का परीक्षण क्यों नहीं करना है या क्यों नहीं, इस पर बहुत सारे जवाब मिलते हैं। लेकिन उन्हें परीक्षण करने के तरीके पर नहीं मिला।इकाई परीक्षण निजी विधि - उद्देश्य सी

मैं इस बात पर चर्चा नहीं करना चाहूंगा कि मुझे निजी परीक्षण करना चाहिए या नहीं, लेकिन इसका परीक्षण कैसे किया जाए इस पर ध्यान केंद्रित करेगा।

क्या कोई मुझे निजी विधि का परीक्षण करने का उदाहरण दे सकता है?

+0

उसी तरह से आप एक सामान्य विधि का परीक्षण करते हैं, आप जिस समस्या का सामना कर रहे हैं, वास्तव में क्या है? – Abizern

+0

निजी तरीकों का परीक्षण करने का निर्णय समस्या स्थान का एक हिस्सा है, समाधान स्थान का हिस्सा नहीं है। – dasblinkenlight

+0

@Abizern यह कहता है कि 'MyClass के लिए कोई दृश्य @interface चयनकर्ता' myMethod '' – Geek

उत्तर

86

उद्देश्य-सी में तरीके वास्तव में निजी नहीं हैं। आपको जो त्रुटि संदेश मिल रहा है वह यह है कि संकलक यह सत्यापित नहीं कर सकता कि जिस विधि को आप बुला रहे हैं वह मौजूद है क्योंकि इसे सार्वजनिक इंटरफ़ेस में घोषित नहीं किया गया है।

इस के आसपास जाने का तरीका कक्षा श्रेणी में निजी विधियों का खुलासा करना है, जो संकलक बताता है कि विधियां मौजूद हैं।

तो अपने परीक्षण का मामला फ़ाइल के शीर्ष पर कुछ इस तरह जोड़ें:

@interface SUTClass (Testing) 

- (void)somePrivateMethodInYourClass; 

@end 

SUTClass वर्ग आप के लिए परीक्षण लिख रहे हैं का वास्तविक नाम है।

इससे आपकी निजी विधि दिखाई देगी, और आप संकलक चेतावनियों के बिना इसका परीक्षण कर सकते हैं।

+0

लेकिन ऐसा करने से इन तरीकों का खुलासा होगा। – Geek

+4

यदि आप इसे अपनी परीक्षा कक्षा में करते हैं, तो आप केवल परीक्षणों के तरीकों का पर्दाफाश कर रहे हैं। – Abizern

+0

लेकिन आपने कहा कि मैंने कक्षा में यह लिखा है कि मैं परीक्षण कर रहा हूं, टेस्ट क्लास में नहीं। – Geek

3

यदि कोई विधि निजी है, तो आपको इसका परीक्षण कभी नहीं करना चाहिए।

इस बारे में सोचें। आपको अपने तरीकों के व्यवहार और अनुबंध का परीक्षण करना चाहिए, इसके बजाय आंतरिक कार्यान्वयन

+1

तो ... यदि हमारे पास आंतरिक कार्यान्वयन था जिसके लिए परीक्षण की आवश्यकता होती है, तो क्या यह एक डिज़ाइन दोष को इंगित करता है जिसमें उस विधि को वास्तव में किसी अन्य वर्ग में सार्वजनिक रूप से लिखा जाना चाहिए, जिसे प्रारंभिक कक्षा में निजी रूप से छुपाया जाना चाहिए? – Mazyod

+2

यदि नहीं, तो निजी तरीकों के साथ एक वर्ग में एक संपूर्ण ऐप बनाने के बाद (सतही रूप से बोलना) परीक्षण नहीं किया जाना चाहिए। – Mazyod

+0

सही Mazyod, मैं पूरी तरह से आपकी पूरक जानकारी – seufagner

7

थोड़ा देर हो चुकी है, लेकिन मैं अभी टीडीडी ट्रेन पर गया हूं।

निजी तरीकों का परीक्षण नहीं किया जाना चाहिए। चूंकि आप अपनी सार्वजनिक विधियों का समर्थन करने के लिए निजी तरीकों को लिखते हैं, इस प्रकार आपके सार्वजनिक तरीकों का परीक्षण अप्रत्यक्ष रूप से उन निजी तरीकों का परीक्षण करता है जो उनका समर्थन करते हैं।

सिद्धांत "निजी तरीकों का परीक्षण नहीं किया जाना चाहिए" सिद्धांत द्वारा समर्थित है "जब आपको निजी तरीकों का परीक्षण करने की आवश्यकता होती है, तो शायद इसका मतलब है कि आपको उन विधियों को अलग वर्ग में ले जाना चाहिए", इस प्रकार उन्हें सार्वजनिक करना ।

+9

तो यह टीडीडी नहीं है तो अगर आपने पहले यूनिट टेस्ट लिखने के बिना कोड का एक टुकड़ा लिखा था। हालांकि, मान लीजिए कि आपकी सार्वजनिक विधि कुछ निजी तरीकों का उपयोग करती है, जब यह विफल हो जाती है कि आप कैसे जानते हैं कि कौन सा असफल रहा? –

4

@Lord ज़ोल्ट साथ सहमत

यह भी ध्यान रखें कृपया अगले (Test-Driven iOS Development ISBN-10 से: 0-321-77418-3, ISBN-13: 978-0-321-77418-7)

परीक्षण निजी तरीके

मैं अक्सर कहा गया है, "मैं अपनी निजी तरीकों का परीक्षण करना चाहिए?" या संबंधित सवाल "मैं अपने निजी तरीकों का परीक्षण करना चाहिए?" दूसरा सवाल पूछ लोगों कि मान लिया है उत्तर पहले "हां" है और अब के लिए एक रास्ता तलाश रहे हैं, अपने परीक्षण सूट में अपने वर्गों के प्राइवेट इंटरफेस का पर्दाफाश करें।

मेरा उत्तर सूक्ष्म तथ्य के अवलोकन पर निर्भर करता है: आपने पहले ही अपने निजी मेथ-ओड्स का परीक्षण किया है। परीक्षण-संचालित विकास में सामान्य लाल-हरे-रिफैक्टर दृष्टिकोण का पालन करके, आपने उन वस्तुओं को करने के लिए अपनी ऑब्जेक्ट्स 'सार्वजनिक एपीआई डिज़ाइन की है।परीक्षण के साथ निर्दिष्ट किए गए परीक्षणों के साथ-साथ को आश्वस्त करने वाले परीक्षणों के निरंतर निष्पादन के साथ आपने कुछ भी तोड़ नहीं दिया है - आप फिट बैठकर आंतरिक अपनी कक्षाओं की नलसाजी व्यवस्थित करने के लिए स्वतंत्र हैं। आपकी निजी विधियां पहले से ही परीक्षण की गई हैं क्योंकि आप जो भी कर रहे हैं वह व्यवहार को दोबारा कर रहा है आपके पास पहले से ही परीक्षण हैं।

आप एक स्थिति जहां एक निजी विधि untested या अधूरे परीक्षण किया है में समाप्त कभी नहीं करना चाहिए, केवल जब आप सार्वजनिक विधियों में से कार्यान्वयन को साफ करने का अवसर दिखाई क्योंकि आप उन्हें बनाने । यह सुनिश्चित करता है कि pri-vate विधियां केवल वर्ग के सार्वजनिक व्यवहार का समर्थन करने के लिए मौजूद हैं, और उन्हें परीक्षण के दौरान बुलाया जाना चाहिए क्योंकि वे निश्चित रूप से सार्वजनिक विधियों से बुलाए जा रहे हैं।

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