[问题]如何使用unittest.mock测试subprocess.run

楼主: VivianAnn (薇薇安安)   2022-08-26 14:41:19
各位版友好
本人目前想用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)
作者: lycantrope (阿宽)   2022-08-27 12:42:00
应该直接对mock_rc.stderr设定成 "stderr message"?stderr非method若设return_value会被当成method mock

Links booklink

Contact Us: admin [ a t ] ucptt.com