मैं कठिनाइयों परीक्षण अजगर कार्यों है कि एक iterable लौट , कार्य हैं ऐसे ही आ रही है में iterable लौटने परीक्षण कार्यों उपज या कार्यों कि बस, एक iterable लौट return imap(f, some_iter)
या return permutations([1,2,3])
की तरह।अजगर
तो क्रमिक उदाहरण के साथ, मुझे उम्मीद है कि फ़ंक्शन का आउटपुट [(1, 2, 3), (1, 3, 2), ...]
होगा। तो, मैं अपने कोड का परीक्षण करना शुरू करता हूं।
def perm3():
return permutations([1,2,3])
# Lets ignore test framework and such details
def test_perm3():
assertEqual(perm3(), [(1, 2, 3), (1, 3, 2), ...])
यह काम नहीं करेगा, perm3()
के बाद से एक iterable, नहीं एक सूची है। तो हम इस विशेष उदाहरण को ठीक कर सकते हैं।
def test_perm3():
assertEqual(list(perm3()), [(1, 2, 3), (1, 3, 2), ...])
और यह ठीक काम करता है। लेकिन क्या होगा यदि मैंने पुनरावृत्तियों को घोंसला दिया है? यह पुनरावृत्तियों उपज है? अभिव्यक्तियों की तरह product(permutations([1, 2]), permutations([3, 4]))
कहें। अब यह शायद उपयोगी नहीं है लेकिन यह स्पष्ट है कि यह होगा ( इटरेटर को अनलोल करने के बाद) [((1, 2), (3, 4)), ((1, 2), (4, 3)), ...]
जैसे कुछ। हालांकि, हम अपने परिणाम के आस-पास list
को लपेट नहीं सकते हैं, क्योंकि यह केवल iterable<blah>
से [iterable<blah>, iterable<blah>, ...]
पर बदल जाएगा। खैर निश्चित रूप से मैं map(list, product(...))
कर सकते हैं, लेकिन 2.
तो की एक नेस्टिंग स्तर के लिए यह केवल काम करता है, अजगर परीक्षण समुदाय समस्याओं के लिए किसी भी समाधान है जब iterables परीक्षण? स्वाभाविक रूप से कुछ पुनरावृत्तियों इस तरह से परीक्षण नहीं किए जा सकते हैं, जैसे कि आप एक अनंत जनरेटर चाहते हैं, लेकिन अभी भी इस मुद्दे को किसी के लिए सोचा जाना आम बात होनी चाहिए।
मैं इसे स्वीकार करूंगा क्योंकि यह डीबीडब्ल्यू के जवाब के जितना अच्छा है। मेरे उत्तर के विपरीत आप 'tuples'/'सूचियों' को मिला सकते हैं। यह उत्तर सिर्फ कॉपी-पेस्ट रननेबल है। :) परंतु! यदि कोई जवाब था तो मैं अधिक संतुष्ट होगा जहां आप (1) वास्तव में जांचते हैं कि यह एक पुनरावर्तनीय लौटाता है ('वापसी' परमिट ([1,2,3]) ''वापसी सूची (क्रमपरिवर्तन ([1,2,3 ])) '** और ** (2) पास नहीं होना चाहिए, नेस्टेड अपेक्षित मूल्य में सही प्रकार होना चाहिए। यह एक सूची में टुपल्स में से एक को बदलना नहीं चाहिए (बदलना' (2, 3, 1) '' [2, 3, 1] ') – Tarrasch
आह। पर्याप्त मेला। मुझे लगता है कि मैं आम तौर पर परीक्षण प्रकारों से बचता हूं, और इसके बजाय इंटरफेस का परीक्षण करने की कोशिश करता हूं। इससे कुछ तरीकों से कार्यान्वयन विवरण बदलते हैं, जबकि एक ही डेटा/परिणाम उत्पन्न करना जारी रखते हैं – dbn