2009-05-31 7 views
125

पर assertEquals बनाम assertEqual पाइथन unittest.TestCase में assertEquals और assertEqual के बीच कोई अंतर है?पाइथन

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

उत्तर

138

अच्छा सवाल!

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

# Synonyms for assertion methods 
assertEqual = assertEquals = failUnlessEqual 

Python 3 में, अपने बात करने के लिए, स्पष्ट रूप से failUnlessEqual मान्य नहीं है। assertEquals अभिकथन तरीकों

# बहुवचन undocumented हैं के लिए इस टिप्पणी :-)

# समानार्थी किया जाता है। उपयोग को हतोत्साहित करने के लिए उन्हें इस तरह रखें।

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

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

तो, नतीजा यह है कि आप का उपयोग करना चाहिए जो कुछ भी आप पायथन 2.x के लिए पसंद है, लेकिन अजगर 3.

+17

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

2

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

+8

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

+3

@Alex टूट जाता है - आप कोई मिल जाएगा उस पर मुझ से तर्क। –

4

के लिए assertEqual की ओर जाते हैं मुझे लगता है कि यह "केवल एक स्पष्ट तरीका है के बीच तनाव था प्रकट होता है कुल कोड प्रवाह को semantically बनाने के लिए इसे "बनाम" उपनाम करने के लिए "। निजी तौर पर मैंने पाया मैं

failIf(some_condition) 

से अधिक
assertFalse(some_condition) 

को पढ़ने के लिए पसंद है, लेकिन अन्य दो से अधिक

assertEqual(a, b) 

पसंद आया (assertEquals(a, b) व्याकरण की मेरी भावना परेशान)।

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

24

एक 3.3 अद्यतन: 26.3.7.1.1. Deprecated aliases से:

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

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

सिर्फ अजगर के लिए 3.x, अजगर 2 के बाद से।7 assertEquals रूप में अच्छी तरह पदावनत किया गया है:।

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

से 25.3.7.1.1. Deprecated aliases