2013-02-11 44 views
6

जो लोग पर्ल को जानते हैं, उनके लिए पाइथन में Test::Deep::is_deeply() जैसा कुछ ढूंढ रहा हूं।मैं दो घोंसले डेटा संरचनाओं की तुलना कैसे कर सकता हूं?

Python's unittest में मैं आसानी से, पहले से ही नेस्टेड डेटा संरचनाओं तुलना कर सकते हैं अगर मैं उन्हें बराबर होने की उम्मीद:

self.assertEqual(os.walk('some_path'), 
       my.walk('some_path'), 
       "compare os.walk with my own implementation") 

हालांकि, वांछित परीक्षण में, os.walk टपल के संबंधित sublist में फ़ाइलों के आदेश करेगा कोई चिंता मत करो।

यदि यह सिर्फ एक परीक्षण था तो एक आसान समाधान कोड करना ठीक होगा। लेकिन मैं अलग-अलग संरचित नेस्टेड डेटा पर कई परीक्षणों की कल्पना करता हूं। और मैं एक सामान्य समाधान की उम्मीद कर रहा हूं।

मैंने पायथन के unittest documentation की जांच की, pyUnit पर और nose and it's plugins पर देखा। सक्रिय रखरखाव भी उपयोग के लिए एक महत्वपूर्ण पहलू होगा।

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

os.walk उदाहरण मैं की तरह कुछ करना चाहते हैं:

comparison = OrderedIterable(
       OrderedIterable(
       str, 
       UnorderedIterable(), 
       UnorderedIterable() 
       ) 
      ) 

ऊपर डेटा संरचना की तरह है कि list(os.walk()) वापसी होगी वर्णन करता है। डेटा A और डेटा B एक इकाई परीक्षण में की तुलना के लिए, वर्तमान पथ नाम एक str() में डाला जा सकता है, और dir और फ़ाइल सूची के साथ आदेश की अनदेखी कर की तुलना में किया जाएगा:

self.assertDeep(A, B, comparison, msg) 

क्या वहाँ बाहर है ? या क्या यह इतना छोटा काम है कि लोग अपना खुद का लिखते हैं? मुझे यह करने में सहज महसूस होता है, लेकिन मैं पुन: पेश नहीं करना चाहता, और विशेष रूप से पूर्ण ऑर्थोगोनल सेट को कोड, उन परीक्षणों आदि को कोड नहीं करना चाहता हूं। संक्षेप में, मैं इसे प्रकाशित नहीं करूंगा और इस प्रकार अगले व्यक्ति को प्रश्न में सूचीबद्ध विशिष्ट उदाहरण को हल करने के लिए फिर से पुनर्लेखन के लिए ...

उत्तर

1

नहीं एक समाधान है, लेकिन वर्तमान में लागू वैकल्पिक हल:

os_walk = list(os.walk('some_path')) 
    dt_walk = list(my.walk('some_path')) 
    self.assertEqual(len(dt_walk), len(os_walk), "walk() same length") 
    for ((osw, osw_dirs, osw_files), (dt, dt_dirs, dt_files)) in zip(os_walk, dt_walk): 
     self.assertEqual(dt, osw, "walk() currentdir") 
     self.assertSameElements(dt_dirs, osw_dirs, "walk() dirlist") 
     self.assertSameElements(dt_files, osw_files, "walk() fileList") 

हम इस उदाहरण कार्यान्वयन काफी कोड का एक सा है कि से देख सकते हैं । जैसा कि हम यह भी देख सकते हैं, पाइथन के अनजान में आवश्यक अधिकांश सामग्री हैं।

3

Python Deep पेर्ल के टेस्ट :: दीप को फिर से लागू करने के लिए एक प्रोजेक्ट प्रतीत होता है। यह टेस्ट :: दीप खुद के लेखक द्वारा लिखा गया है। अंतिम विकास 2008 की गर्मियों में हुआ था।

अपडेट: मैंने मॉड्यूल को पाइथन 3 पर this branch

पर पोर्ट किया है

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

  • कोई संबंधित समस्या नहीं^_^