python模拟函数未调用

2024-01-10

我正在测试 python 代码(一个 django 3.0.5 项目,尽管我认为它不相关),但我无法调用我的模拟对象的函数。这是我的代码:

**myproject.mypackage.myhelpers**


def get_dict():
    return dict()

**myproject.mypackage.mythings**

from .myhelpers import get_dict


def use_dict():
    the_dict = get_dict()
    pass
    return


**myproject.tests.test_mythings**

from ..mypackage import mythings
import unittest
import unittest.mock as mock


class MyThingsTests(unittest.TestCase):

    @mock.patch('myproject.mypackage.myhelpers')
    def test_using_dict(self, mock_myhelpers):
        test_dict = {
            "hi": "foo",
            "there": "bar",
            "sir": "foobar"
        }

        mock_myhelpers.get_dict.return_value = test_dict

        mythings.use_dict()

        mock_myhelpers.get_dict.assert_called_once()

但最终测试失败并出现错误:

AssertionError: Expected 'get_dict' to have been called once. Called 0 times


试试这个:

@mock.patch('myproject.mypackage.mythings.get_dict')
def test_using_dict(self, mock_get_dict):
    test_dict = {
        "hi": "foo",
        "there": "bar",
        "sir": "foobar"
    }

    mock_get_dict.return_value = test_dict

The 哪里打补丁 https://docs.python.org/3/library/unittest.mock.html#where-to-patch文档的部分对此进行了一些解释。

从我的理解来看,myproject.mypackage.mythings已经导入了“真实的”get_dict在你打补丁之前。所以如果你像这样修补它@mock.patch('myproject.mypackage.myhelpers'), 只有myhelpers模块将“知道”它已被修补。这mythings模块仍然会引用真实的get_dict.

我认为上述修补方式的替代方法是更改​​导入方式get_dict反而。而不是导入get_dict直接导入即可myhelpers并使用get_dict as myhelpers.get_dict。那么你应该能够保持你的修补方式相同,因为get_dict将会从myhelpers这将有修补方法。

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

python模拟函数未调用 的相关文章

随机推荐

  • 使用 Visual Studio 进行 Scrapy 调试

    我是 Scrapy 和 Python 的新手 我很喜欢它 是否可以使用 Visual Studio 调试 scrapy 项目 如果可以的话 如何实现 我创建了一个名为 runner py 的初始化文件 from scrapy cmdline
  • 我是否需要在多线程环境中保护对 STL 容器的读取访问?

    我有一个 std list 容器和这些线程 一个编写器线程可以无限地添加元素 一个读取器 写入器线程在可用时读取和删除元素 多个读取器线程访问容器的 SIZE 通过使用 size 方法 有一个普通的互斥锁可以保护前两个线程对列表的访问 我的
  • 在 Oracle 中使用 CREATE 命令将列名括在双引号内无法正常工作。为什么?

    让我们考虑一个简单的表products在 Oracle 中 我在 Oracle 9i 上尝试过 我使用以下 CREATE 语句创建此表 CREATE TABLE products prod id varchar2 7 primary key
  • Python 集合模块中的计数器

    我遇到了一个非常奇怪的问题 我正在尝试在集合模块中使用计数器函数 但是 我不断收到相同的错误消息 AttributeError module object has no attribute Counter 我之前尝试过使用它并且工作得很好
  • `show` 记录而不派生 Show

    我经常需要在调试时打印一些内容 除非我需要查看的数据类型派生Show我无法打印它 对于某些数据类型我无法添加deriving Show 到定义 因为它可能在图书馆或其他我无法到达的地方 无论如何 我可以打印这些数据类型进行调试吗 独立推导
  • Hibernate OnDelete Cascade 不适用于 MySql,但适用于 postgres 和 Ms-Sql

    我有 2 个实体 Thread实体和Post使用 OnetoOne 映射的实体后 gt 线程 A Thread实体包含许多Posts 我知道我应该使用 OnetoMany 而不是 OnetoOne 但为了避免所有集合问题 我使用 Oneto
  • Facebook API、时区和国家/地区

    我正在开发一个网站 用户可以使用他们的 Facebook 凭据登录 现在我面临日期和时间的问题 我的本地系统使用 浪漫标准时间 这与 Facebook 使用的不同 我所在的地方使用 DST 根据一年中的时间 我们可以使用 UTC 1 或 U
  • 如何保持 SELECT 元素的宽度较小但选项灵活

    Problem 我的下拉菜单是动态加载的 有一些选项很长 这弄乱了我的页面布局 我想要的尺寸select元素很小 但展开时 允许用户看到所有长的options 为此 我设置了width of the SELECT为固定值 例如width 2
  • Kubernetes:ERR_NAME_NOT_RESOLVED

    我已经在 GKE 中部署了 mongo db Spring Boot BE Angular 应用程序 我的 FE 服务是一个负载均衡器 它需要与我的 BE 连接才能获取数据 但我在浏览器中收到控制台错误 GET http contactbe
  • 角度获取过滤后的 ng-repeat 的长度

    我已从 Angular 1 0 8 升级到 Angular 1 2 9 以帮助提高我的应用程序的性能 我引入了轨道 通过它提高了速度 我曾经拥有的 div class result row div
  • 将字符串中的子字符串大写

    我正在尝试创建类似的东西 string How do you do today substring o gt gt gt hOw dO yOu dO tOday 我已经编写了其余的代码 提示输入字符串等 我只是坚持必须将字符串中的子字符串大
  • WPF 动画警告:6:无法执行操作

    我在 VIsual Studio 输出面板中的 WPF 应用程序中观察到警告 其中包含以下文本 WPF 动画警告 6 无法执行操作 因为 指定的 Storyboard 从未应用于此对象以进行交互 control Action 停止 Stor
  • R 交互选择数据框的行

    我有一个数据框 说 df lt data frame a 1 10 b runif 10 我希望能够向用户显示数据框并让他们选择 单击 一行 然后检索该行 有点像edit df 除了我想要的要简单得多 因为我不需要编辑功能 我只需要侦听其中
  • PHP 允许的 zip mime 类型

    我知道 从这个问题的答案来看 rar zip 文件 MIME 类型 https stackoverflow com questions 6977544 rar zip files mime type 大多数人在 PHP 中检查 zip 文件
  • 在 Bigquery 中 - 如何从 Firebase 事件表查询昨天数据和过去 7 天的数据

    我使用下面的查询来获取指定数据范围的数据 SELECT event date count event name as APP Installs FROM table events WHERE TABLE SUFFIX BETWEEN 201
  • 我应该使用哪种 JDBC 驱动程序类型来访问 Oracle 数据库?

    我们正在 AIX 上的 Tomcat Web 服务器内运行 J2EE 应用程序 我们需要访问 Oracle 数据库的一些视图和存储过程 这个oracle数据库不是我们的应用程序所基于的数据库 而是我们必须与之通信的外部系统 据我现在所知 在
  • 如何将 React 组件渲染为函数返回

    我试图将 React Native 组件渲染为函数返回 但没有成功 代码如下 In App js in a new project import as React from react import View Text TouchableO
  • php命令行选项解析,如何

    我在 PHP 5 2 中使用 Console Getopt 并惊讶地发现它与其他语言 perl bash java 中的 getopt 有何不同 谁能建议如何解析返回的数组 opts 中的参数 php myprog php a varA c
  • opencv如何填充空心线

    I have an image like this after I applied some processings e g cv2 Canny it looks like this now 正如您所看到的 黑线变得空心 我尝试过腐蚀和膨胀
  • python模拟函数未调用

    我正在测试 python 代码 一个 django 3 0 5 项目 尽管我认为它不相关 但我无法调用我的模拟对象的函数 这是我的代码 myproject mypackage myhelpers def get dict return di