अजगर में assertEquals बनाम assertEqual


183

क्या अजगर में assertEqualsऔर उसके बीच अंतर हैassertEqualunittest.TestCase ?

और अगर नहीं है, तो दो कार्य क्यों हैं? केवल सुविधा के लिए?

जवाबों:


208

अच्छा प्रश्न!

असल में, पाइथन 2.6 में, दोनों assertEqualऔर assertEqualsएलियास को सुविधा है failUnlessEqual। स्रोत उन्हें इस प्रकार घोषित करता है:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

में अजगर 3 , अपनी बात करने के लिए, failUnlessEqualस्पष्ट रूप से मान्य नहीं है। assertEqualsइस टिप्पणी को वहन करती है :-)

# मुखर तरीकों के लिए पर्यायवाची

# बहुवचन निर्विवाद है। उपयोग को हतोत्साहित करने के लिए उन्हें रखें।

# अधिक न जोड़ें। मत हटाओ।

# इन पर एक चक्रण चक्र के माध्यम से जाने से कई लोग नाराज होंगे।

तो, अपशॉट यह प्रतीत होता है कि आपको पाइथन 2.x के लिए जो कुछ भी पसंद है उसका उपयोग करना चाहिए, लेकिन assertEqualपाइथन 3 की ओर रुख करें ।


34
वास्तव में बहुवचन के बारे में टिप्पणी अस्पष्ट है। यह कहता है कि "प्लुरल्स" अनिर्दिष्ट हैं। आपका अंतिम वाक्य इंगित करता है कि आप इसे 's' के साथ समाप्त होने वाले विधि नामों से समझते हैं, जैसे assertEquals। फिर भी व्याकरणिक रूप से, समता एक क्रिया का एकवचन (तीसरा व्यक्ति) रूप है, न कि बहुवचन। मुझे लगता है कि आप टिप्पणी-लेखक का सही मतलब समझ गए हैं, लेकिन 'बहुवचन' शब्द गलत है।
LarsH

45

ए 3.3 अपडेट: 26.3.7.1.1 से। पदावनत उपनाम :

ऐतिहासिक कारणों से, टेस्टकैस के कुछ तरीकों में एक या एक से अधिक उपनाम थे जो अब पदावनत हो गए हैं। निम्न तालिका उनके नामांकित उपनामों के साथ सही नामों को सूचीबद्ध करती है:

Method Name   | Deprecated alias | Deprecated alias
--------------+------------------+-----------------
assertEqual() | failUnlessEqual  | assertEquals
...

24

सिर्फ पायथन 3.x के लिए ही नहीं, चूंकि पायथन 2.7 assertEqualsको भी चित्रित किया गया है:

Method Name            | Deprecated alias(es)
_________________________________________________________
assertEqual()          | failUnlessEqual, assertEquals

से 25.3.7.1.1। पदावनत उपनाम


5

मुझे लगता है कि यह "केवल एक ही स्पष्ट तरीका" बनाम "उर्फ" समग्र कोड प्रवाह को शब्दार्थ बनाने के बीच तनाव था। व्यक्तिगत रूप से मैंने पाया कि मुझे पढ़ना पसंद है

failIf(some_condition)

ऊपर

assertFalse(some_condition)

लेकिन पसंद किया

assertEqual(a, b)

अन्य दो पर (assertEquals(a, b) व्याकरण की मेरी भावना को परेशान करता है)।

"इसे करने के लिए केवल एक स्पष्ट तरीका" ने आगे बढ़ने की पूर्वता ली है।


3

मुझे http://docs.python.org/library/unittest.html में assertEquals का कोई उल्लेख नहीं मिला । हालाँकि, जब मैं TestCase को आयात करता हूं और फिर एक "मदद (TestCase)" करता हूं, तो यह सूचीबद्ध है। मुझे लगता है कि यह सुविधा का सिर्फ एक पर्याय है।


10
हाँ, लेकिन यह बुरी तरह से "इसे करने के लिए केवल एक ही स्पष्ट तरीका है" मंत्र :-(।
एलेक्स मार्टेली

4
@ एलेक्स - आपको उस पर मुझसे कोई तर्क नहीं मिलेगा।
फ्रेड लार्सन

0

मुझे पता है कि यह विशिष्ट प्रश्न का उत्तर नहीं देता है, लेकिन अगर आप यहां खोजते हैं:

using deprecated method assertEquals()

आपको बस कॉल को .assertEqual () में बदलने की जरूरत है (बराबर में 's' हटाएं)


-1

यह लगभग वैसा ही है सिवाय इसके कि जोर-शोर से प्रतिशोध किया जाता है। यह यहाँ के रूप में मुखर उपयोग करने के लिए सिफारिश की है:

# Synonyms for assertion methods
# The plurals are undocumented.  Keep them that way to discourage use.
# Do not add more.  Do not remove.
# Going through a deprecation cycle on these would annoy many people.


      assertEquals = assertEqual

ऑनलाइन स्रोत: https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642121aa2b/Lib/lib2to3/fixes/fix_asserts.py


1
तकनीकी रूप से आप सही हैं, लेकिन नामों में से एक को हटा दिया गया है और दूसरा नहीं है। आपके द्वारा लिंक किया गया कोड गैर-पदावनत किए गए नाम को फिर से लिखने के लिए है।
मारियस गेदमिनस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.