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

2024-01-15

我在 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.path or PYTHONPATH.

有什么指点吗?


我使用 Dan Passaro 的解决方案,直到我遇到这个patch.object https://docs.python.org/3/library/unittest.mock.html#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和访问ook通过monkey, i.e. monkey.ook。如果我需要经常写这个,我会添加ook = monkey.ook为了方便起见,我的测试开始了。 (或者甚至是 import 语句,以防我永远不需要模拟这个特定的属性monkey.)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用补丁相对路径进行模拟? 的相关文章

  • Pandas 用单位插值数据

    大家好 几年来我一直在寻找 Stackoverflow 它对我帮助很大 以至于我以前不需要注册 但今天我遇到了一个使用 Python 与 Pandas 和 Quantities 也可能是 unum 或 pint 的问题 我尽力发表清晰的帖子
  • 动态添加字段到数据类对象

    我正在编写一个库来访问 REST API 它返回带有用户对象的 json 我将其转换为 dict 然后将其转换为数据类对象 问题是并非所有字段都是固定的 我想动态添加其他字段 未在我的数据类中指定 我可以简单地为我的对象分配值 但它们不会出
  • 仅选择多索引 DataFrame 的一个索引

    我正在尝试仅使用多索引 DataFrame 中的一个索引创建一个新的 DataFrame A B C first second bar one 0 895717 0 410835 1 413681 two 0 805244 0 813850
  • 使用单元测试项目中定义的 Startup 类时.NET Core TestServer 返回 404

    我有一个基本的 net core api web 应用程序和一个使用 TestServer 发出 http 请求的单元测试项目 我有一个 TestStartup 类 它是 api 项目中 Startup 类的子类 如果 Startup 类位
  • 是否有用于运行测试组的 JUnit TestRunner?

    我目前正在使用 JUnit 4 并且需要将我的测试分为可以以任意组合有选择地运行的组 我知道 TestNG 具有注释测试以将它们分配到组的功能 但我现在无法迁移到 TestNG 看来这可以通过一些自定义注释和自定义 JUnit TestRu
  • 如何访问数据框中的一行嵌套字典

    我有一个 json 文件 如下所示 file name main question no Q 1 question what is answer user John comment It is defined as value number
  • 找不到文件 setuptools-27.2.0-py3.5.egg

    这个问题适用于Python 3 5 2 在Windows 10 64位 上使用Anaconda 4 3 0 当我尝试使用 pip 安装软件包时 出现以下错误 Command python setup py egg info failed w
  • 从 colab 中的驱动器中的 python 脚本导入 python 模块

    我目前正在 Google Colab 上开展一个使用 Tensorflow API 的机器学习项目 我创建了一个文件夹并将其上传到谷歌驱动器上以在谷歌Colab上运行 我成功安装了谷歌驱动器并可以运行脚本 但是当我尝试从同一文件夹中的脚本导
  • Google Cloud Functions 中的 Python

    Google Cloud Functions 可以使用 sklearn pandas 等包处理 python 吗 如果是这样 有人可以向我指出如何做到这一点的资源方向 我已经搜索了一段时间 似乎这是不可能的 我找到的只是将基本 python
  • 使用 imaplib 库连接到电子邮件时遇到 AUTHENTICATIONFAILED 错误

    如何连接到 imaplib 库而不遇到 AUTHENTICATIONFAILE 错误 通过网络浏览器登录时 我的 Gmail 收件箱显示严重的安全警报 登录尝试被阻止 IMAP SERVER imap gmail com USERNAME
  • pytest动态生成测试方法

    您好 我如何为列表或文件数量动态生成测试方法 假设我有 file1 file2 和 filen 其输入值为 json 现在我需要对多个值运行相同的测试 如下所示 class Test File unittest TestCase def t
  • 如何在 python 中生成可在 C++ 中使用的十六进制转义字符串?

    我正在尝试为使用 MessagePack 的库创建综合单元测试 我想在 python 中创建十六进制转义的二进制字符串 我可以将其嵌入到 C 源代码中 我正在创建一个这样的 In 6 umsgpack packb 0 0 dummy voi
  • Python 有限边界 Voronoi 单元

    我正在尝试改编我在 stackoverflow 上找到的代码来创建具有有限边界的 voronoi 单元 我发现下面的代码https stackoverflow com a 20678647 2443944 https stackoverfl
  • 在不同的函数中调用变量而不使用全局变量

    我试图在另一个函数中定义的函数中使用变量 列表 而不将其设置为全局 这是我的代码 def hi hello 1 2 3 print hello def bye hello print hello hi bye hello 目前我收到错误 b
  • 无法在 VS Code 中导入

    我是 python 新手 一直在使用 VS code 现在我正在研究汤普森采样问题 需要 numpy 和 matplotlib 我已经导入了这两个库 但 VS code 给出了无法导入的错误 我知道我必须使用 PIP 进行安装 并且我已经看
  • 与 CPython、Jython 和 IronPython 相比,PyPy 能提供什么?

    从我在博客上看到和读到的内容来看 PyPy 是一个非常雄心勃勃的项目 与它的兄弟姐妹 CPython Jython 和 IronPython 相比 它会带来哪些优势 是速度 跨平台兼容性 包括移动平台 在没有 GIL 的情况下使用 c 扩展
  • PyInstaller,规范文件,导入错误:没有名为“blah”的模块

    我正在尝试通过构建 python 脚本py安装程序 http www pyinstaller org 我使用以下命令来配置 生成规范文件并构建 wget pyinstaller zip extracted it python Configu
  • Django的注释框架和CSRF

    据我了解 Django的评论框架 https docs djangoproject com en 1 4 ref contrib comments 专为匿名公众评论而设计 就像您通常在博客或文章下面看到的那样 换句话说 任何人都可以发表评论
  • 如何为 PyDev 制作文件模板?

    我希望在我创建的每个新文件的顶部都有一些有关许可证 作者等的样板信息 但我找不到要勾选的正确框 基本上 我想创建一个新文件 并已将其填充 在顶部 author Me license something copyright something
  • Python BeautifulSoup 循环表数据

    这里对 Python 非常陌生 我正在尝试从此页面捕获一些数据这一页 https us diablo3 com en item helm 我正在尝试获取两个列表中捕获的项目名称和项目类型 我稍后可以弄清楚如何将它们连接到一张表中 任何帮助都

随机推荐