【发布时间】:2021-11-21 14:24:48
【问题描述】:
我有一个对象MyObject,它使用mymodule.constants.MYCONSTANT 中定义的常量。我可以像这样使用上下文管理器成功修补常量:
import pytest
from unittest.mock import patch
def test_constant(self):
with patch('mymodule.constants.MYCONSTANT', 3):
MyObject()
但是,我不知道如何使用 patch 作为装饰器来使用等效补丁:
@patch('mymodule.constants.MYCONSTANT', 3)
def test_constant(self, mock_constant):
MyObject()
上述操作失败并出现fixture mock_constant not found 错误。我尝试使用
@patch('mymodule.constants.MYCONSTANT', return_value=3)
但是MYCONSTANT 不会被替换为 3。
【问题讨论】:
-
如果您在装饰器中提供替换值,则不会将任何参数插入到测试函数中,因此如果您删除示例中的
mock_constant参数,它可能会起作用。return_value仅适用于函数调用或类实例化的结果。
标签: python mocking pytest decorator patch