我正在尝试在一个项目中进行测试,但是出现一个奇怪的错误。
我用下面的玩具示例再现了非常相似的情况:
这是文件结构:
.
├── some_package
│ ├── __init__.py
│ └── some_file.py
└── test_mock_patch.py
"""some_package/some_file.py"""
# when I import here, the test fails
from math import floor
def some_func(a, b):
# if I import here, the test passes
# from math import floor
return floor(a + b)
"""test_mock_patch.py"""
import pytest
from unittest import mock
from some_package.some_file import some_func
@pytest.fixture
def mock_floor():
with mock.patch('math.floor', autospec=True) as m:
yield m
def test_some_func(mock_floor):
some_func(1.1, 1)
assert mock_floor.call_count == 1
使用的命令:pytest -v -s test_mock_patch.py
错误:
为什么当我在函数内导入test_some_func
并通过顶部导入时测试失败?
在此先感谢您对解释mock.patch
版本:
答案 0 :(得分:1)
这是一个最小的示例,说明如何通过更改test_mock_patch.py
文件来获得所需的结果。
import pytest
from some_package.some_file import some_func
def test_some_func(monkeypatch):
with monkeypatch.context() as mc:
mc.setattr('some_package.some_file.floor', lambda x: 'foo')
res = some_func(1.1, 1)
assert res == 'foo'
就像我在评论中提到的那样,您需要在导入函数处对其进行修补。