2013-04-24 5 views
24

निजी तरीकों के लिए परीक्षण लिखना अच्छा अभ्यास है?क्या मुझे आरएसपीईसी का उपयोग करके निजी तरीकों का परीक्षण करना चाहिए?

class Group 
    has_many :members 

    private 

    def release_members 
    members.each { |member| member.update_attributes group_id: nil } 
    end 
end 

यह RSpec में release_members विधि के लिए एक परीक्षण लिखने के लिए अच्छा अभ्यास होगा:

निम्नलिखित सरल उदाहरण पर विचार करें? मेरा मानना ​​है कि आपको विधि भेजने के साथ विधि को कॉल करना होगा। group.send(:release_members) जो कभी-कभी फहरा हुआ होता है।

+1

ऐसा प्रतीत होता है कि रूबी रोग्स में सैंडी मेटज़ द्वारा पॉडकास्ट है जो इस विषय के बारे में बात करता है http://rubyrogues.com/087-rr-book-clubpractical-object-oriented-design-in-ruby-with-sandi- मेट्ज़ /। तर्क यह है कि यदि आप चाहें तो निजी विधि का परीक्षण कर सकते हैं (अंततः परीक्षण भी हटाएं) लेकिन सबसे महत्वपूर्ण बात यह है कि निजी इंटरफेस जिसे सार्वजनिक विधि कहा जाता है। –

उत्तर

17

आप इन स्लाइडों में एक सैंडी मेटज़ टॉक से उस विषय की गहन चर्चा पा सकते हैं।

https://speakerdeck.com/skmetz/magic-tricks-of-testing-railsconf

वह कहती है कि आप कर सकते हैं अपने निजी तरीकों का परीक्षण-ड्राइव यदि आप चाहें, लेकिन केवल परीक्षण है कि आप के बारे में चिंता करनी चाहिए सार्वजनिक इंटरफ़ेस का परीक्षण होते हैं कि। अन्यथा आप कार्यान्वयन के लिए बहुत कसकर जोड़ सकते हैं।

मुझे लगता है कि टच द्वारा बिंदु, सेवा और मूल्य वस्तु को विभाजित करने और उन परीक्षणों को डालने पर बिंदु भी एक अच्छा है यदि आप जटिल निजी तरीकों के बारे में परेशान हो रहे हैं जिनका परीक्षण नहीं किया जाता है।

+0

मुझे उस लिंक पर इंगित करने के लिए धन्यवाद। एक महान संसाधन की तरह लगता है! –

+1

लिंक टूटा हुआ है। – Oin

28

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

यदि किसी निश्चित बिंदु पर आप लंबे निजी तरीकों से सहज नहीं हैं, तो शायद यह है कि आपके पास कक्षा के बाहर उस तर्क को खींचने और एक और मॉड्यूल या कक्षा बनाने का अवसर है। फिर, आप इकाई का परीक्षण कर सकते हैं, फिर से केवल इसके इंटरफ़ेस, यानी इसके सार्वजनिक तरीकों।

कुछ दुर्लभ मामलों में, निजी विधियों का परीक्षण करना आवश्यक है क्योंकि संपूर्ण आंतरिक तर्क बहुत जटिल है और आप समस्या को विभाजित करना चाहते हैं। लेकिन 99.9% में, निजी तरीकों का परीक्षण करना एक बुरा विचार है।

+0

बहुत समझ में आता है। यह वैकल्पिक नहीं है, इसे परीक्षण में स्वतंत्र रूप से ट्विक करने का मौका देने के लिए परीक्षण नहीं किया जाना चाहिए और केवल बाहरी एपीआई तोड़ने पर ही चिंता करें। –

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