[問題]如何使用unittest.mock測試subprocess.run
各位版友好
本人目前想用Python的mock來測試subprocess.run()
看了一些網路資料,但還是試不出來
在common.py欲測試的function為check(),內容如下:
import subprocess
def check():
cmd = ["python3", "is_corrupted.py"]
process = subprocess.run(cmd, stderr=subprocess.PIPE, check=False)
if process.stderr:
return "str(process.stderr)"
elif process.returncode == 1:
return "corrupted"
return "pass"
本人在另一個檔案test.py用mock寫的測試函數為:
import unittest
import subprocess
from unittest import mock
from common import check
Class UT(unittest.TestCase):
@mock.patch(subprocess.run)
def test_check(self, mock_subprocess_run):
mock_rc = mock.MagicMock()
mock_subprocess_run.return_value = mock_rc
mock_rc.stderr.return_value = b'stderr message'
self.assertEqual(check(), "stderr message")
if __name__ == "__main__":
unittest.main()
得到以下錯誤:
======================================================================
FAIL: test_check (__main__.UT)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib64/python3.6/unittest/mock.py", line 1183, in patched
return func(*args, **keywargs)
File "test.py", line 13, in test_check
self.assertEqual(check(), "stderr message")
AssertionError: "<MagicMock name='run().stderr' id='140534116111528'>" !=
'stderr message'
- <MagicMock name='run().stderr' id='140534116111528'>
+ stderr message
實在不知自己錯在哪,為何在test.py中的process.stderr仍然是一個MagicMock物件而
非字串? 我已經為其設定 return_value了
先謝謝各位看完文章!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 168.127.214.224 (美國)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1661496081.A.0F8.html
※ 編輯: VivianAnn (168.127.214.224 美國), 08/26/2022 14:42:59
推
08/27 12:42,
2年前
, 1F
08/27 12:42, 1F
→
08/27 12:43,
2年前
, 2F
08/27 12:43, 2F
Python 近期熱門文章
PTT數位生活區 即時熱門文章