2014-09-05 3 views
10

में एक सबप्रोसेस कॉल का मज़ाक उड़ा रहा है मेरे पास एक विधि है (run_script) परीक्षण करना चाहेंगे। विशेष रूप से मैं परीक्षण करना चाहता हूं कि subprocess.Popen पर एक कॉल होता है। यह जांचना बेहतर होगा कि subprocess.Popen को कुछ पैरामीटर के साथ बुलाया जाता है। जब मैं परीक्षण चलाता हूं तो मुझे TypeError: 'tuple' object is not callable मिलता है।पायथन

सबप्रोसेस को वास्तव में यह सुनिश्चित करने के लिए मैं अपनी विधि का परीक्षण कैसे कर सकता हूं?

@mock.patch('subprocess.Popen') 
def run_script(file_path): 
    process = subprocess.Popen(['myscript', -M, file_path], stdout=subprocess.PIPE) 
    output,err = process.communicate() 
    return process.returncode 

def test_run_script(self, mock_subproc_popen): 
    mock_subproc_popen.return_value = mock.Mock(communicate=('ouput','error'), returncode=0) 
    am.account_manager("path") 
    self.assertTrue(mock_subproc_popen.called) 

उत्तर

19

यह है कि आप run_script समारोह की पैच डेकोरेटर का उपयोग करें, जब से तुम एक नकली तर्क वहाँ उत्तीर्ण नहीं होते हैं मेरे लिए असामान्य लगता है।

कैसे इस बारे में:

def run_script(file_path): 
    process = subprocess.Popen(['myscript', -M, file_path], stdout=subprocess.PIPE) 
    output,err = process.communicate() 
    return process.returncode 

@mock.patch('subprocess.Popen') 
def test_run_script(self, mock_subproc_popen): 
    process_mock = mock.Mock() 
    attrs = {'communicate.return_value': ('output', 'error')} 
    process_mock.configure_mock(**attrs) 
    mock_subproc_popen.return_value = process_mock 
    am.account_manager("path") # this calls run_script somewhere, is that right? 
    self.assertTrue(mock_subproc_popen.called) 

इस समय, आपका मज़ाक उड़ाया subprocess.Popen एक टपल वापस जाने के लिए, process.communicate causeing लगता है() TypeError: 'tuple' object is not callable. बढ़ाने के लिए। इसलिए mock_subproc_popen पर return_value को ठीक से प्राप्त करना सबसे महत्वपूर्ण है।