python - 类实例化和方法的 pytest 模拟异常
问题描述
我有以下夹具。
import mod1
import pytest
from unittest import mock
@pytest.fixture()
def patched_mocked():
with mock.patch('mod1.f1') as mocked_function:
x_mock = mock.Mock(mod1.X)
x_mock.producer = mock.Mock() # need to mock exception
x_mock.producer.func2 = lambda: None # need to mock exception
mocked_function.return_value = x_mock
yield x_mock
def test_1(patched_mocked):
这是mod1.py
:
class Y:
def func2(self):
raise Exception("Shouldn't be called")
class X:
def __init__(self):
self.producer = Y()
def func1(self):
self.producer.func2()
我有几个测试用例使用上面的夹具。Y.func2()
现在我需要分别为和Y()
引发异常编写两个测试用例。如何模拟异常?
我尝试了以下但它不工作。
@pytest.fixture()
def patched_mocked_exception():
with mock.patch('mod1.f1') as mocked_function:
x_mock = mock.Mock(mod1.X)
x_mock.producer = mock.Mock()
with mock.patch('mod1.f1.Y.func2', side_effect=Exception('mocked ex'):
x_mock.producer.func2 = lambda: None
mocked_function.return_value = x_mock
yield x_mock
解决方案
推荐阅读
- python - 编译 libvirt 时出现“ImportError: cannot import name 'metadata'”
- javascript - WebView 重定向停止工作,logcat 中没有错误
- ios - 在 UICollectionView 中执行 UITextView 键入时防止滚动位置重置
- command-line - vlc 分别从输入中流式传输左右音频通道
- spreadsheet - 查询动态范围列表名称。设置下限范围
- go - 识别字符串中的双字节字符并将其转换为单字节字符
- javascript - 如何修复反应本机错误任务:app:processDebugMainManifest FAILED
- django - 在 django 中可以使用这种子查询吗?
- c++ - 如果我参考基类捕获它,为什么我的异常会被切分到基类?
- postgresql - Spring Boot Postgres Flyway 集成