ruby - रूबी के कर्नेल वर्ग के लिए एक जोर() विधि जोड़ने के लिए यह मुहावरेदार रूबी है?
assert xunit (4)
कर्नेल मॉड्यूल को जोर देने के तरीके को जोड़ने के लिए आपका क्या कारण है? क्यों न सिर्फ एक अन्य मॉड्यूल का इस्तेमाल किया जाता है जिसे Assertions
या कुछ और कहा जाता है?
इस कदर:
module Assertions
def assert(param)
# do something with param
end
# define more assertions here
end
यदि आपको वास्तव में हर जगह उपलब्ध होने के लिए अपने तर्कों की आवश्यकता है तो ऐसा कुछ करें:
class Object
include Assertions
end
अस्वीकरण: मैंने कोड का परीक्षण नहीं किया लेकिन सिद्धांत रूप में मैं इसे इस तरह से करना चाहता हूं।
रूबी में केंट बेक के एक्सयूनेट के समकक्ष कोडिंग करके मैं रूबी की समझ का विस्तार कर रहा हूं। पायथन (जो केंट में लिखते हैं) की भाषा में एक जोर () विधि है जो बड़े पैमाने पर उपयोग की जाती है। रूबी नहीं करता है मुझे लगता है कि इसे जोड़ने के लिए आसान होना चाहिए, लेकिन यह कर्नल को सही जगह रखना है?
बीटीडब्लू, मैं रूबी में विभिन्न यूनिट चौखटे के अस्तित्व का पता लगाता हूं - यह "कुछ काम करने" के बजाय रूबी मुहावरों को जानने के लिए एक अभ्यास है
मेरी समझ यह है कि आप रुबी से अधिक परिचित होने के एक तरीके के रूप में अपना स्वयं का परीक्षण सूट लिख रहे हैं। तो जब टेस्ट :: यूनिट एक मार्गदर्शिका के रूप में उपयोगी हो सकती है, संभवत: यह नहीं है कि आप क्या चाहते हैं (क्योंकि यह पहले ही काम कर चुका है)
उस ने कहा, अजगर का जोर (कम से कम मेरे लिए) है, सी की भूमिका के समान है (3) । यह विशेष रूप से उन मामलों को पकड़ने के लिए, जहां "यह कभी नहीं होना चाहिए" इकाई परीक्षणों के लिए डिज़ाइन नहीं किया गया है
रूबी के अंतर्निहित इकाई परीक्षण समस्या को देखने के लिए कैसे करते हैं, तो, यह है कि प्रत्येक व्यक्तिगत टेस्ट केस क्लास टेस्टसीज़ का एक उपवर्ग है, और इसमें "ज़ोर देना" कथन शामिल होता है जो इसकी पुष्टि करता है कि उसके पास क्या पारित किया गया था और इसके लिए रिकॉर्ड किया गया था रिपोर्टिंग।
मुझे लगता है कि रूबी में दावा करने के लिए यह पूरी तरह से मान्य है। लेकिन आप दो अलग अलग चीजों का उल्लेख कर रहे हैं:
- xUnit चौखटे अपने परीक्षण की उम्मीदों को रोकने के लिए तरीकों का उपयोग करें। वे आपके परीक्षण कोड में उपयोग किए जाने के उद्देश्य हैं, आपके एप्लिकेशन कोड में नहीं।
- सी, जावा या पायथन जैसी कुछ भाषाओं में, अपने कार्यक्रमों के कोड के अंदर उपयोग किए जाने के लिए अभिप्रेत निर्माण
assert
निर्माण शामिल है, ताकि आप उनके ईमानदारी के बारे में धारणाओं को देख सकें। ये चेक कोड के अंदर ही बनाए गए हैं वे एक परीक्षण-समय उपयोगिता नहीं हैं, लेकिन एक विकास समय एक है।
मैंने हाल ही में solid_assert लिखा है : एक रूबी का उपयोग करने वाली एक रूबी लाइब्रेरी और मेरे ब्लॉग में एक पोस्ट भी इसकी प्रेरणा समझा रही है .. यह आपको अभिव्यक्ति के रूप में लिखने देती है:
assert some_string != "some value"
assert clients.empty?, "Isn't the clients list empty?"
invariant "Lists with different sizes?" do
one_variable = calculate_some_value
other_variable = calculate_some_other_value
one_variable > other_variable
end
और उन्हें निष्क्रिय कर दिया जा सकता है ताकि रिक्त बयानों के रूप में मूल्यांकन किया जा सके। यह आपको उत्पादन में किसी भी प्रदर्शन की समस्या से बचने देता है। लेकिन ध्यान दें कि व्यावहारिक प्रोग्रामर्स ने उन्हें निष्क्रिय करने के विरुद्ध सुझाव दिया है। यदि उन्हें वास्तव में प्रदर्शन पर असर पड़े तो आपको उन्हें केवल निष्क्रिय करना चाहिए।
जवाब देने के मुताबिक रूढ़िवादी रुबी रास्ता सामान्य raise
वक्त का उपयोग कर रहा है, मुझे लगता है कि यह अभिव्यक्ति की कमी है। मुखर प्रोग्रामिंग के सुनहरे नियमों में से एक सामान्य अपवाद निपटने के लिए दावा का उपयोग नहीं कर रहा है। वे दो पूरी तरह से अलग चीजें हैं। यदि आप उन दोनों के लिए एक ही वाक्यविन्यास का उपयोग करते हैं, तो मुझे लगता है कि आपको कोड अधिक अस्पष्ट होगा। और निश्चित रूप से आप उन्हें निष्क्रिय करने की क्षमता खो देते हैं।
आपको यह आश्वस्त किया जा सकता है कि दावे का प्रयोग करना एक अच्छी बात है क्योंकि दो क्लासिक किताबें जैसे कि व्यावहारिक प्रोग्रामर से जर्नीमेन से मास्टर और कोड पूर्ण रूप से पढ़ना आवश्यक है और उनके पूरे अनुभाग को समर्पित करें और उनका उपयोग सुझाएं। वहाँ भी एक अच्छा आलेख है, जो कि कथित रूप से प्रोग्रामिंग नाम से एक अच्छा लेख है, जो कि बहुत प्रभावी ढंग से समझाता है, जिसके बारे में जोरदार प्रोग्रामिंग है और इसका उपयोग कब किया जाता है (यह जावा में आधारित है, लेकिन किसी भी भाषा पर अवधारणाएं लागू होती हैं)।
नहीं, यह सबसे अच्छा अभ्यास नहीं है रुबी में दावा करने के लिए सबसे अच्छा सादृश्य (बस) बढ़ रहा है
raise "This is wrong" unless expr
और यदि आप अधिक विशिष्ट अपवाद हैंडलिंग के लिए प्रदान करना चाहते हैं, तो आप अपने अपवाद लागू कर सकते हैं