मैं उपयोगकर्ता परिभाषित वस्तुओं के अनुक्रम को संसाधित कर रहा हूं। यह निम्नलिखित के समान दिखता है:मैं उन कॉल्स पर कैसे जोर दे सकता हूं जो पायथन मॉक के साथ अनुक्रम तर्क स्वीकार करते हैं?
class Thing(object):
def __init__(self, x, y):
self.x = x
self.y = y
विधि मैं वर्तमान में परीक्षण कर रहा हूँ निम्न के समान कार्यक्षमता है:
def my_function(things):
x_calc = calculate_something(t.x for t in things)
y_calc = calculate_something(t.y for t in things)
return x_calc/y_calc
समस्या मैं calculate_something
के लिए कॉल परीक्षण कर रहा है का सामना करना पड़ रहा है। मैं बहुत तरह का दावा है कि इन कॉल हुआ, कुछ करना चाहते हैं:
calculateSomethingMock.assert_any_call(the_sequence)
मैं अनुक्रम calculate_something
में पारित कर दिया के आदेश के बारे में परवाह नहीं है, लेकिन मुझे परवाह है कि तत्वों सभी उपस्थित हैं। मैं जेनरेटर फ़ंक्शन को set
पर कॉल में लपेट सकता हूं, लेकिन मुझे नहीं लगता कि मेरा परीक्षण यह निर्धारित करना चाहिए कि calculate_something
में किस प्रकार का अनुक्रम पारित किया गया है। मैं इसे किसी भी तरह का अनुक्रम पारित करने में सक्षम होना चाहिए। मैं वैकल्पिक रूप से एक विधि बना सकता हूं जो जेनरेटर सिंटैक्स का उपयोग करने के बजाय अनुक्रम उत्पन्न करता है और उस विधि को नकली करता है, लेकिन यह ओवरकिल जैसा लगता है।
मैं इस दावे को सबसे अच्छी तरह से कैसे व्यवस्थित कर सकता हूं, या यहां मेरी परेशानी का परीक्षण खराब संरचित कोड का संकेत है?
मैं पाउथन 2.7.3 का उपयोग मॉक 1.0.1 के साथ कर रहा हूं।
(जो कोई मजबूर महसूस करता है उस पर टिप्पणी करने के लिए, मुझे पता है मैं परीक्षण पिछले कर रहा हूँ और है कि इस सबसे बड़ी अभ्यास नहीं माना जाता है कर रहा हूँ।)
संपादित करें:
घड़ी this marvelous talk entitled "Why You Don't Get Mock Objects by Gregory Moeck" के बाद , मैंने पुनर्विचार किया है कि मुझे calculate_something
विधि का मज़ाक उड़ाया जाना चाहिए।
मैं उस सूची में खुदाई से बचने की कोशिश करता हूं, लेकिन मुझे लगता है कि यह एकमात्र तरीका हो सकता है। क्या आप एक उदाहरण प्रदान कर सकते हैं? – jpmc26
धन्यवाद। यह परीक्षण विधि को संरक्षित करने के तरीके पर निर्भर करता है, और यह सूची में गुजरने वाली विधि पर भी निर्भर करता है। मैं आदेश पर भरोसा परीक्षण पर बहुत उत्सुक नहीं हूँ। यदि मैं 'गणना' कुछ 'में पारित तर्क के लिए कुछ अन्य डेटा संरचना में परिवर्तन करने का निर्णय लेता हूं, तो क्या मैं परीक्षण विफल होना चाहता हूं? या इसके विपरीत, यदि मैं एक अलग डेटा प्रकार के लिए कॉल की जांच करने के लिए परीक्षण बदलता हूं, तो क्या मैं इसे फिर से पास करने के लिए विधि को संशोधित करना चाहता हूं? – jpmc26
हां, लेकिन याद रखें यह एक उदाहरण है। आप किसी भी अन्य डेटा संरचना की गणना 'गणना' कर सकते हैं, बस उस प्रतिबिंबित करने के लिए परीक्षण अपडेट करें (अपेक्षित मानों को बदलकर)। आप परीक्षा उत्तीर्ण करना चाहते हैं। आपने पहले ही देखा है कि 'call_args_list' का उपयोग करके' गणना 'कुछ' 'पर दिए गए तर्क कैसे प्राप्त करें। उसके बाद, यह केवल आपके द्वारा अपेक्षित डेटा के साथ पारित डेटा की तुलना करने की बात है। –