【发布时间】:2023-01-08 10:58:08
【问题描述】:
我正在使用 side_effect 测试生成的模拟异常。基于此页面 https://changhsinlee.com/pytest-mock/ 我试图在调用 load_data 方法时生成异常,但它对我不起作用。
test_load_data.py::test_slow_load_02 FAILED [100%]
tests/pytest_samples/test_load_data.py:31 (test_slow_load_02)
ds_mock = <MagicMock name='DataSet' id='4473855648'>
@patch("python_tools.pytest_samples.load_data.DataSet")
def test_slow_load_02(ds_mock):
with patch.object(ds_mock, 'load_data', side_effect=Exception('URLError')):
> with pytest.raises(Exception) as excinfo:
E Failed: DID NOT RAISE <class 'Exception'>
test_load_data.py:35: Failed
这是代码。
慢.py
class DataSet:
def load_data(self):
return 'Loading Data'
加载数据.py
from python_tools.pytest_samples.slow import DataSet
def slow_load():
dataset = DataSet()
return dataset.load_data()
测试数据.py
@patch("python_tools.pytest_samples.load_data.DataSet")
def test_slow_load_02(ds_mock):
with patch.object(ds_mock, 'load_data', side_effect=Exception('URLError')):
with pytest.raises(Exception) as excinfo:
actual = slow_load()
assert str(excinfo.value) == 'URLError'
这个测试代码对我有用:
def test_slow_load_01(mocker):
with mocker.patch("python_tools.pytest_samples.load_data.DataSet.load_data", side_effect=Exception('URLError')):
with pytest.raises(Exception) as excinfo:
actual = slow_load()
assert str(excinfo.value) == 'URLError'
我想了解为什么 patch 和 patch.object 不起作用。
谢谢
【问题讨论】:
标签: python python-3.x pytest pytest-mock