पायथन मेरे लिए अपेक्षाकृत नई भाषा है। यूनिट परीक्षण और निर्भरता इंजेक्शन कुछ ऐसा है जो मैं थोड़ी देर के लिए कर रहा हूं, इसलिए मैं इसे सी # परिप्रेक्ष्य से परिचित हूं।पायथन में मूल निर्भरता इंजेक्शन (मॉकिंग/परीक्षण उद्देश्यों के लिए)
हाल ही में, मैं पायथन कोड के इस टुकड़े लिखा है:
import requests # my dependency: http://docs.python-requests.org/en/latest/
class someClass:
def __init__(self):
pass
def __do(self, url, datagram):
return requests.post(self, url, datagram)
और फिर मुझे एहसास हुआ कि मैं सिर्फ एक हार्ड-कोडेड निर्भरता बनाया था। Bleh।
मुझे क्या करना मेरे कोड को बदलने पर विचार किया था "निर्माता" निर्भरता इंजेक्शन:
def __init__(self,requestLib=requests):
self.__request = requestLib
def __do(self, url, datagram):
return self.__request.post(self, url, datagram)
यह अब मुझे यूनिट टेस्टिंग के लिए एक नकली/नकली निर्भरता इंजेक्षन करने की अनुमति देता है, लेकिन यह अगर यकीन नहीं था पायथन-आईसी माना जाता था। तो मैं मार्गदर्शन के लिए पाइथन समुदाय से अपील कर रहा हूं।
बुनियादी डीआई करने के लिए पाइथन-आईसी तरीकों के कुछ उदाहरण क्या हैं (ज्यादातर यूनिट टेस्ट लिखने के लिए जो मोक्स/नकली का उपयोग करते हैं)? How does @mock.patch know which parameter to use for each mock object?
ध्यान दें कि '__leading_double_underscore' नाम उलझन का आह्वान करता है, और आम तौर पर टालना चाहिए। परीक्षण के तहत मॉड्यूल के लिए इसे इंजेक्ट करने के लिए ['mock'' request'] (https://docs.python.org/3/library/unittest.mock.html) करना आसान नहीं होगा? – jonrsharpe
मैंने पढ़ा कि __leading डबल अंडरस्कोर एक विधि को निजी रूप से चिह्नित करना था। क्या मुझे गलती हुई थी? यदि हां, तो मुझे कुछ निजी कैसे चिह्नित करना चाहिए? – Pretzel
क्या इसे इंजेक्ट करने के बजाय मॉड्यूल के लिए अनुरोधों को मॉक करना आसान होगा? मुझे नहीं पता। मैं चीजों को करने के पाइथन तरीकों से परिचित नहीं हूं, इसलिए मैं पूछ रहा हूं। ;) – Pretzel