gpt4 book ai didi

python - 如何使用补丁相对路径进行模拟?

转载 作者:IT老高 更新时间:2023-10-28 20:26:30 25 4
gpt4 key购买 nike

我在 python 测试文件中有这样的东西:

from mock import patch,
from ..monkey import ook
[...]
@patch('monkey.ook', Mock(return_value=None))
def test_run_ook (self, mock_ook):
self.assertIsNone(ook())
mock_ook.run.assert_called_once_with('')

当我运行这个测试时,我得到一个 ImportError: No module named monkey。显然,我正在修补的路径不正确。但是,我不确定如何在不弄乱 sys.pathPYTHONPATH 的情况下使其正确。

任何指针?

最佳答案

我使用了 Dan Passaro 的解决方案,直到我遇到了这个使用 patch.object 的解决方案– 这对我来说看起来更好:

from unittest.mock import patch,
from .. import monkey
[...]
@patch.object(monkey, 'ook', Mock(return_value=None))
def test_run_ook (self, mock_ook):
self.assertIsNone(monkey.ook())
mock_ook.run.assert_called_once_with('')

优点:

  • 不需要样板代码 __name__ + '.object_to_be_mocked'
  • 测试用例的所有依赖项都在文件开头以 import 语句明确说明。
  • 如果您要模拟的对象的虚线名称较长(例如“amazon.jungle.monkey.ook”),因此您编写 @patch.object(amazon.jungle.monkey , 'ook', ...),你的 IDE 的静态代码分析可以确保至少 amazon.jungle.monkey 是一个有效的变量,因为你没有把整个东西写成字符串 'amazon.jungle.monkey.ook'.

缺点:

  • 你不能from ..monkey import ook,但需要from .. import monkey并通过monkey访问ook ,即 monkey.ook。如果我需要经常写这个,为了方便起见,我会将 ook = monkey.ook 添加到测试的开头。 (或者甚至导入语句,以防我不需要模拟 monkey 的这个特定属性。)

关于python - 如何使用补丁相对路径进行模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com