2010-03-08 11 views
28

इतने सारे assertEquals() या इसी तरह के फ़ंक्शन अपेक्षित मान को पहले पैरामीटर के रूप में क्यों लेते हैं और वास्तविक एक दूसरे के रूप में क्यों लेते हैं?
यह मेरे लिए प्रतिद्वंद्वी लगता है, तो क्या इस असामान्य आदेश के लिए कोई विशेष कारण है?ऑर्डर (अनुमानित, वास्तविक) में assertEquals() पैरामीटर क्यों हैं?

+1

यही कारण है कि मैं आम तौर पर इस तरह के assertThat रूप matchers, (वास्तविक उपयोग करते हुए अंत में, (अपेक्षित) है) मुझे – JonathanC

+0

पढ़ने के लिए इतना आसान लगता है क्या आप वाकई आदेश है? दस्तावेज़ 'assertEqual' के लिए मानक इंगित नहीं करते हैं https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertEqual और उस पृष्ठ को ब्राउज़ करने से पता चलता है कि ऑर्डर अनजान मॉड्यूल के भीतर असंगत है । लेकिन इस पायथन मुद्दे का अर्थ है (वास्तविक, अपेक्षित) वास्तव में मानक है: http://bugs.python.org/issue10573 –

+0

इसके अलावा, ध्यान दें कि 'assertEquals' को बहिष्कृत किया गया है-' assertEqual' का उपयोग करें (भले ही कम से कम 2.7 में, यह वास्तव में इंगित नहीं करता कि कौन सा पैरामीटर अपेक्षित है और कौन सा वास्तविक है) –

उत्तर

19

क्योंकि लेखकों के पास आपके अंतर्ज्ञान से मेल खाने का 50% मौका था।

अन्य अधिभार

assertWhatever(explanation, expected, actual) 

और स्पष्टीकरण है, जो तुम क्या जानते का हिस्सा है, उम्मीद है, जो है कि तुम क्या जानते हैं, के रूप में वास्तविक करने का विरोध किया है, जो तुम नहीं के साथ चला जाता क्योंकि जब आप कोड लिखते हैं तो जानें।

+9

हालांकि, उस मामले में, यह थोड़ा असंगत हो जाता है क्योंकि अधिकांश भाषाओं में, आवश्यक पैरामीटर पहले दिखाई देते हैं, और अनिवार्य लोग आखिरी होते हैं। यही कारण है कि मैं अधिक स्वाभाविक रूप से पर जोर देता हूं जो भी (वास्तविक, अपेक्षित [, स्पष्टीकरण]) – jor

+5

क्षमा करें, मेरा मतलब था _optional_ अंतिम दिखाई देते हैं, अनिवार्य नहीं है ... – jor

+2

बिल्कुल, जोर! इसके अलावा, अगर ("ए" == एस) की बजाय (एस == "ए") लिखने के लिए सशर्त में यह अधिक आम है (हालांकि यह बहस करने योग्य है कि यह दूसरे तरीके से बेहतर होगा - पहले सामान्यता के मामले में हालांकि एक जीतता है)। – benroth

2

xUnit परीक्षण सम्मेलन की उम्मीद/वास्तविक है। इसलिए, उन लोगों के लिए जो प्राकृतिक आदेश हैं क्योंकि उन्होंने यही सीखा है।

दिलचस्प रूप से एक xUnit ढांचे के लिए सम्मेलन से ब्रेक में कुनिट वास्तविक/अपेक्षित के लिए जाता है। कम से कम जावास्क्रिप्ट के साथ आप सिर्फ एक नया कार्य है कि पुराने एक समाहित बना सकते हैं और यह मूल चर निर्दिष्ट कर सकते हैं:

var qunitEquals = equals; 
equals = function(expected, actual, message) { 
    qunitEquals(actual, expected, message); 
}; 
4

मैं आम सहमति है कि स्थिरता # 1 है के साथ सहमत हैं, लेकिन की तुलना शब्दकोशों के व्यवहार हो सकता है एक यदि आप इस प्रश्न का मूल्यांकन कर रहे हैं तो उपयोगी डेटापॉइंट।

जब मुझे एक diff पर "+" दिखाई देता है, तो मैंने इसे "प्रक्रिया की जांच की गई प्रक्रिया" के रूप में पढ़ा। फिर, व्यक्तिगत प्राथमिकताएं लागू होती हैं।

नोट: मैंने वर्णमाला कुंजी का उपयोग किया और शब्दकोश को अब तक बनाया ताकि उदाहरण की स्पष्टता के लिए केवल एक मध्यम कुंजी बदल जाएगी। अन्य परिदृश्य अधिक obfuscated diffs प्रदर्शित करते हैं। इसके अलावा उल्लेखनीय,> = 2.7 में assertEqual uses assertDictEqual और> = 3.1

exl.py

from unittest import TestCase 


class DictionaryTest(TestCase): 

    def test_assert_order(self): 
     self.assertEqual(
      { 
       'a_first_key': 'value', 
       'key_number_2': 'value', 
       'z_last_key': 'value', 
       'first_not_second': 'value', 
      }, 
      { 
       'a_first_key': 'value', 
       'key_number_2': 'value', 
       'z_last_key': 'value', 
       'second_not_first': 'value', 
      } 
     ) 

आउटपुट:

$ python -m unittest exl 
F 
====================================================================== 
FAIL: test_assert_order (exl.DictionaryTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "exl.py", line 18, in test_assert_order 
    'second_not_first': 'value', 
AssertionError: {'a_first_key': 'value', 'z_last_key': 'value', 'key_number_2': 'value', 'first_ [truncated]... != {'a_first_key': 'value', 'z_last_key': 'value', 'key_number_2': 'value', 'second [truncated]... 
    {'a_first_key': 'value', 
- 'first_not_second': 'value', 
    'key_number_2': 'value', 
+ 'second_not_first': 'value', 
    'z_last_key': 'value'} 

---------------------------------------------------------------------- 
Ran 1 test in 0.001s 

FAILED (failures=1) 
संबंधित मुद्दे