如何在 python 中进行模拟并仍然允许执行模拟函数的实际代码

2023-11-27

我最近开始使用 python 中的模拟框架。似乎如果我修补一个函数,则不会调用实际代码 - 这意味着该实际函数所做的数据库更改等未实现。 我一直试图通过预先调用该函数并存储返回值并将其作为 arg 在 patch() 中传递来绕过它,但是 有更好的方法吗?理想情况下,我想要一个可以作为silent observer我可以简单地询问它是否有某个observed函数是否被调用、调用了多少次以及使用了什么参数

我当前的代码

return_val = funct()

# C: Now call me again and assert that these intensive computation functions are not called but taken from cache
with patch('funct', return_value=return_val) as mock_task:

    me_response = self.client.get(me_url, format='json')    #should fetch from cache
    assert not mock_task.called

要模拟调用的方法,您应该使用wraps关键词。考虑以下:

class Foo(object):

    def do_thing(self, a):
        print("A: %s" % a)
        self._do_private_thing(a)

    def _do_private_thing(self, a):
        print("PRIVATE STUFF HAPPENING.")
        print("A: %s" % a)

然后在你的测试中你会得到类似的东西:

import mock
a = Foo()
with mock.patch.object(a, '_do_private_thing', wraps=a._do_private_thing) as private_mock:
    a.do_thing("lol")
    private_mock.assert_called_with("lol")

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 python 中进行模拟并仍然允许执行模拟函数的实际代码 的相关文章

随机推荐

  • Django:获取查询集的补充

    我得到某个模型的查询集 我想得到它的补充 即该模型的所有实例not在上述查询集中 我怎样才能做到这一点 简短的解决方案 qs Model objects filter qs with objects to exclude result Mo
  • 找不到变量:$

    var scriptFile tempNode attr customJScriptSrc 当通过这个我得到 参考错误 找不到变量 请建议我任何替代方法 添加这个脚本 位于文档顶部 在 javascript 代码之前添加 或者下载该库并在代
  • 请求未到达控制器但仍收到 200 响应

    我正在玩弹簧安全并试图确保一个安静的应用程序 但后来遇到了这个相当荒谬的问题 我的控制器上的所有操作都很好 请求被接受 但请求实际上从未到达控制器 并且始终返回 200 没有任何内容 我的安全配置如下所示 package com bpawa
  • 使用滑动 TabLayout 以编程方式更改选项卡

    我正在使用滑动Tab布局谷歌提供的示例 我正在尝试以编程方式切换回片段内的dialogView 内的第一个选项卡 我看到一个scrollToTab int tabIndex intpositionOffset 我怎样才能调用它返回到第一个选
  • 将 YouTube 视频嵌入

    我通过在互联网上找到的片段嵌入了 YouTube 的视频 以下是我使用的代码 interface FirstViewController Private void embedYouTube NSString urlString frame
  • 与其他测试用例一起运行时 Django 单元测试失败

    我的 Django 单元测试行为不一致 在我使用 sqlite 的开发机器上 如果我分别在两个应用程序上运行测试 测试就会通过 但是如果我运行manage py test为了一次测试所有内容 我开始在两次测试中一致地获得单元测试失败 在我使
  • 是否有一个 eclipse 插件可以为“javascript 显示模块模式”创建大纲视图?

    我喜欢 eclipse 经过一些调整它可以用于 javascript 编程 有语法完成 linting 格式化 还有 大纲 尽管仅适用于简单的 javascript 文件 令我烦恼的是 遵循 显示模块 设计模式的文件没有 大纲视图 这恰好是
  • 使用 eclipse 的 JSP 间歇性 ClassNotFoundException

    在 Windows 上运行 Eclipse Indigo Tomcat 7 使用 eclipse wtp 插件在 ROOT 上下文中运行 Web 应用程序 我遇到了这个间歇性问题 其中 eclipse 无法找到已编译的 JSP 首次访问JS
  • 解析 .NET 中的纯 Win32 PE 文件(Exe/DLL)

    我需要解析普通的 Win32 DLL Exe 并从中获取所有导入和导出以在控制台或 GUI 即 Win Forms 上显示 是否可以通过读取导出 导入表来解析 C NET 中的 Win32 DLL Exe 并从中获取托管类型 由于它是非托管
  • ElasticSearch 术语聚合

    我尝试使用弹性搜索通过以下查询对下面的数据执行术语聚合 输出将名称分解为标记 请参见下面的输出 所以我尝试将 os name 映射为 multi field 现在我无法通过它进行查询 是否可以有没有 token 的索引 比如 Fedora
  • 使用 Android 蓝牙发送文件?

    有什么方法可以使用 Android 的内部蓝牙将文件发送到其他设备吗 请举个例子 这是一个小功能 你可以使用 Method to share data via bluetooth public void bluetoothFunctiona
  • SSIS——允许任务失败但包成功?

    有没有办法允许脚本任务失败 但包执行结果仅基于other任务的执行结果 例如 我有 5 个任务 我不在乎任务 2 的结果是什么 但如果其他任何任务失败 我希望包失败 不然我希望它成功 这可能吗 还有设置FailPackageOnFailur
  • x,y数据逆时针排序

    I have a set of points in a text file random shape dat The initial order of points in the file is random I would like to
  • 维基百科 API:如何搜索特定类别中的术语

    我很难弄清楚一项基本任务 如何找到术语 限制在特定类别 我觉得 Wiki API 文档有点令人困惑 我只想接收一个 JSON 文件作为输出 其中包含与该术语相关的所有建议 前任 我搜索矩阵 类别 电影 这样我就可以拥有 黑客帝国 1 黑客帝
  • 如何在垂直recyclerview android中实现Vertical Recyclerview?

    假设我有2 items in a RecyclerView其中每个项目都有一个innerrecyclerview其中有周围100 件其中两者都是垂直的或任何对现有问题没有任何影响的东西 我已经在其他 stackoverflow 问题或其他
  • 创建无丢帧的无尽 cgpath

    我需要不断创建一个cgpath 目前我是这样做的 func createLine var rand randomBetweenNumbers 1 2 currentY if rand lt 1 5 currentX CGPathAddLin
  • Qt 应用程序:无法加载平台插件“windows”。可用平台有:

    我用 msvc2010 编译了 Qt 5 0 0 因为我需要带有配置字符串的 opengl configure prefix CD qtbase opensource nomake nomake examples nomake demo o
  • Keras:使用带有 flow_from_dataframe / flow_from_directory 的 ImageDataGenerator 时如何禁用图像大小调整?

    我正在尝试使用 ImageDataGenerator 并将自定义函数传递给preprocessing function范围 但是 根据 Keras 文档 此函数仅在图像大小调整后才会运行 预处理函数 每个输入隐含的函数 该函数将在图像大小调
  • Node.js 中的“未捕获的语法错误:意外的标记 <”

    当我尝试提供客户端代码时 出现以下屏幕截图错误 当我尝试跑步时node server server js 下面是我的服务器 js code app use express static path join dirname public ap
  • 如何在 python 中进行模拟并仍然允许执行模拟函数的实际代码

    我最近开始使用 python 中的模拟框架 似乎如果我修补一个函数 则不会调用实际代码 这意味着该实际函数所做的数据库更改等未实现 我一直试图通过预先调用该函数并存储返回值并将其作为 arg 在 patch 中传递来绕过它 但是 有更好的方