久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

在 Python 中模擬子進程調用

Mocking a subprocess call in Python(在 Python 中模擬子進程調用)
本文介紹了在 Python 中模擬子進程調用的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我有一個方法 (run_script) 想要測試.具體來說,我想測試對 subprocess.Popen 的調用是否發生.測試是否使用某些參數調用 subprocess.Popen 會更好.但是,當我運行測試時,我得到 TypeError: 'tuple' object is not callable.

I have a method (run_script) would like to test. Specifically I want to test that a call to subprocess.Popenoccurs. It would be even better to test that subprocess.Popen is called with certain parameters. When I run the test however I get TypeError: 'tuple' object is not callable.

如何測試我的方法以確保 subprocess 確實是使用模擬調用的?

How can I test my method to ensure that subprocess is actually being called using mocks?

@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)

推薦答案

你在 run_script 函數上使用補丁裝飾器對我來說似乎很不尋常,因為你沒有在那里傳遞模擬參數.

It seems unusual to me that you use the patch decorator over the run_script function, since you don't pass a mock argument there.

這個怎么樣:

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() 引發 TypeError: 'tuple' object is not callable..所以最重要的是將mock_subproc_popen上的return_value弄的恰到好處.

Right now, your mocked subprocess.Popen seems to return a tuple, causeing process.communicate() to raise TypeError: 'tuple' object is not callable.. Therefore it's most important to get the return_value on mock_subproc_popen just right.

這篇關于在 Python 中模擬子進程調用的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How should I verify a log message when testing Python code under nose?(在鼻子下測試 Python 代碼時,我應該如何驗證日志消息?)
Patch __call__ of a function(修補函數的 __call__)
How to call self in a mock method of an object in Python?(如何在 Python 中對象的模擬方法中調用 self?)
Mocking only a single method on an object(僅模擬對象上的單個方法)
Checking call order across multiple mocks(檢查多個模擬的調用順序)
How to properly use mock in python with unittest setUp(如何通過 unittest setUp 在 python 中正確使用 mock)
主站蜘蛛池模板: 国产一级片久久久 | 欧美激情久久久 | 国产精品美女一区二区三区 | 男女啪啪高潮无遮挡免费动态 | 红色av社区 | 91就要激情| 黄网站免费观看 | 91精品国产91久久久久久密臀 | 在线视频一区二区 | 国产成人av一区二区三区 | 欧美成人精品 | 成人国产网站 | 做a网站| 亚洲精品9999| 中文字幕视频在线看5 | 精品国产欧美一区二区三区不卡 | www.色综合| 欧美一级片免费看 | 亚洲精品一区二区久 | 国产精品a久久久久 | 国产精品毛片av一区 | 在线日韩不卡 | 成人在线视频一区二区三区 | 国产一级黄色网 | 成人水多啪啪片 | 亚洲成人精品在线 | 久久综合久久久 | 国产亚洲精品久久午夜玫瑰园 | 精品日韩一区二区 | 四虎永久在线精品免费一区二 | 日韩精品在线网站 | 自拍偷拍亚洲视频 | 日韩国产高清在线观看 | 久久99精品视频 | 日韩图区 | 国产激情亚洲 | 蜜月aⅴ国产精品 | 日韩精品免费一区二区在线观看 | 一级毛片视频在线 | 一区二区三区四区电影视频在线观看 | 日韩成人精品在线 |