我正在用于subprocess一项任务,并且我有一个try/except用于捕获的块TimeoutExpired。我尝试使用来模拟我的对象,side_effect这样我就可以使用 来捕获假异常pytest.raises。无论我做什么,我都会得到DID NOT RAISE <class 'subprocess.TimeoutExpired'>。我尝试过很多事情,尽管我对嘲笑没有那么丰富的经验,但我相信类似的事情原则上应该有效:
# my_check.py
from subprocess import TimeoutExpired, PIPE, check_output
class Check:
def __init__(self, name):
self.name = name
self.status = self.get_status()
def get_status(self):
try:
out = check_output(["ls"], universal_newlines=True, stderr=PIPE, timeout=2)
except TimeoutExpired as e:
print(f"Command timed out: {e}")
raise
if self.name in out:
return True
return False
# test_my_check.py
import pytest
from unittest import mock
from subprocess import TimeoutExpired
@mock.patch("src.my_check.Check", autospec=True)
def test_is_installed_exception(check_fake):
check_fake.get_status.side_effect = TimeoutExpired
obj_fake = check_fake("random_file.txt")
with pytest.raises(TimeoutExpired):
obj_fake.get_status()
由于某种原因它不起作用,但我无法理解出了什么问题。
元芳怎么了
相关分类