【发布时间】:2020-10-29 03:04:09
【问题描述】:
pytest 5.0.1 蟒蛇3.6
假设你有一个类,你在另一个类中导入和初始化
from file import Client
class A()
def __init__(self):
self.client = Client()
def call(self):
self.client.execute()
现在当我想测试它时,因为这个导入类涉及外部组件(例如数据库),我想模拟这件事的发生(例如,我不敢相信你读数据库这么慢......)。但实事求是。所以我有一个带有补丁的夹具。耶!
@pytest.fixture
def setup_a(self):
with patch('path_to_patch') as patched:
a = A()
return a
但是,我似乎无法从 fxiture 中取出补丁来使用它。我尝试创建一个新补丁,但这不起作用(例如断言 False)
@patch('path_to_patch')
def test_successful_execution(self, new_patch, setup_a):
setup_a.call()
assert new_patch.execute.called
我也尝试过隐式使用上述补丁
@patch('path_to_patch')
def test_successful_execution(self, new_patch, setup_a):
setup_a.call()
assert setup_a.execute.called
这样做的正确方法是什么?如果您需要更多解释,请告诉我。
【问题讨论】:
标签: python-3.x mocking pytest patch fixtures