2013-10-01 4 views
8

के साथ मैं एक मॉक ऑब्जेक्ट को दिए गए इनपुट के आधार पर कुछ मान वापस करने की कोशिश कर रहा हूं। मैंने SO पर कुछ उदाहरण देखा और किसी कारण से मैं अभी भी इसे काम नहीं कर सकता। मेरे पास अभी क्या है।पायथन पैच ऑब्जेक्ट एक साइड_फैक्ट

class EmailChecker(): 
    def is_email_correct(email): 
     some regex to determine if email is valid, returns either True or False 

def my_side_effect(**args): 
    if args[0] == '1': 
     return True 
    else: 
     return False 

myMock = mock.patch.object(EmailChecker, 'is_email_correct', side_effect=my_side_effect) 

फिर भी यह काम नहीं कर रहा है। मुझे यहां क्या समझ नहीं आ रहा है? एक डेकोरेटर या संदर्भ प्रबंधक के रूप में

+0

'func' क्या है:


my_side_effect इस प्रकार सरल किया जा सकता है? – falsetru

+0

'args' के बजाय' ** args' क्यों? – falsetru

+0

कीवर्ड तर्कों के लिए 'args' चेक, स्थितित्मक तर्कों के लिए' * args' चेक। तो @falsetru का उल्लेख है, आप शायद '* args' चाहते हैं। –

उत्तर

13

उपयोग patch.object, निम्नलिखित कोड में के रूप में:

>>> class EmailChecker(): 
...  def is_email_correct(self, email): 
...   pass 
... 
>>> def my_side_effect(*args): 
...  if args[0] == '1': 
...   return True 
...  else: 
...   return False 
... 
>>> with mock.patch.object(EmailChecker, 'is_email_correct', side_effect=my_side_effect): 
...  checker = EmailChecker() 
...  print(checker.is_email_correct('1')) 
...  print(checker.is_email_correct('2')) 
... 
True 
False 

नोट: *args से बदला **argsselfis_email_correct विधि के लिए अनुपलब्ध self जोड़ा गया।

def my_side_effect(email): 
    return email == '1' 
+0

दुर्घटना पर ** तर्कों का मेरा उपयोग होना चाहिए। महान काम किया! धन्यवाद! –

+0

@ कोंगलॉन्ग, मैंने 'my_side_effect' के बारे में एक नोट जोड़ा। इसकी जांच - पड़ताल करें। – falsetru

+1

क्या "self" पैरामीटर प्राप्त करने का कोई तरीका है जो सामान्य रूप से my_side_effect फ़ंक्शन के अंदर मूल कॉल में होता है? –

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