如何在Python中模拟链式函数调用?

2024-03-14

我正在使用mock http://www.voidspace.org.uk/python/mock/由 Michael Foord 编写的库,用于帮助我在 django 应用程序上进行测试。

我想测试我是否正确设置了查询,但我认为我不需要实际访问数据库,因此我尝试模拟查询。

我可以很好地模拟查询的第一部分,但是当我链接其他内容时,我没有得到我想要的结果。

功能:



    @staticmethod
    def get_policies(policy_holder, current_user):
        if current_user.agency:
            return Policy.objects.filter(policy_holder=policy_holder, version__agency=current_user.agency).distinct()
        else:
            return Policy.objects.filter(policy_holder=policy_holder)
  

我的测试:第一个断言通过,第二个断言失败。



    def should_get_policies_for_agent__user(self):
        with mock.patch.object(policy_models.Policy, "objects") as query_mock:
            user_mock = mock.Mock()
            user_mock.agency = "1234"
            policy_models.Policy.get_policies("policy_holder", user_mock)
            self.assertEqual(query_mock.method_calls, [("filter", (), {
                'policy_holder': "policy_holder",
                'version__agency': user_mock.agency,
            })])
            self.assertTrue(query_mock.distinct.called)
  

我很确定问题是初始 query_mock 在调用 .filter() 后返回一个新的模拟,但我不知道如何捕获该新模拟并确保在其上调用 .distinct() 。

有没有更好的方法来测试我想要达到的目标?我试图确保正在调用正确的查询。


每个模拟对象都保留调用它时返回的模拟对象。您可以使用模拟对象的 return_value 属性来获取它。

对于你的例子,

self.assertTrue(query_mock.distinct.called)

unique 没有在您的模拟上调用,它是在您的模拟的过滤方法的返回值上调用的,因此您可以通过执行以下操作来断言调用了distinct:

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

如何在Python中模拟链式函数调用? 的相关文章

  • 如何从Python中的函数返回多个值? [复制]

    这个问题在这里已经有答案了 如何从Python中的函数返回多个变量 您可以用逗号分隔要返回的值 def get name you code return first name last name 逗号表示它是一个元组 因此您可以用括号将值括
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • python multiprocessing 设置生成进程等待

    是否可以生成一些进程并将生成进程设置为等待生成的进程完成 下面是我用过的一个例子 import multiprocessing import time import sys def daemon p multiprocessing curr
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • MongoEngine 查询具有以列表中指定的前缀开头的属性的对象的列表

    我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素 现在我有一段这样的代码 query mymodel terms term in query terms 并且这会匹配在列表 term 上有一个项目的对象 该列表中的
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • django Q 对象嵌套reduce

    得到非常复杂的查询 请不要尝试解决示例 问题更复杂 crit crit append Q firstcond name Q firstcond isnull True crit append Q secondcond name Q firs
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 如何使用 AWS Lambda Python 读取 AWS S3 存储的 Word 文档(.doc 和 .docx)文件内容?

    我的场景是 我尝试使用 python 实现从 Aws Lambda 读取 AWS 存储的 S3 word 文档 doc 和 docx 文件内容 下面的代码是我使用的 我的问题是我可以获取文件名 但无法读取内容 def lambda hand
  • python 中的“槽包装器”是什么?

    object dict 和其他地方的隐藏方法设置为这样的
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 查找包含缺失值的列的名称

    我想找到所有列的名称NA或丢失数据并将这些列名称存储在向量中 create matrix a lt c 1 2 3 4 5 NA 7 8 9 10 NA 12 13 14 NA 16 17 18 19 20 cnames lt c aa b
  • 调用Jenkins插件(thinBackup)的内部方法

    我需要调用一些 Jenkins 插件的内部函数 这些插件似乎没有通过 Jenkins CLI 或远程 api 公开 例如 其中之一是thinBackup 我想致电restore方法可在https github com jenkinsci t
  • SQL 中跨多列的 Like 语句

    我正在尝试跨多个列查询类似的语句 我有以下搜索词 狗 猫 兔子 沙鼠 豚鼠 仓鼠 我需要在 动物 表中搜索这些术语或类似的术语 该表有大约 40 个不同的列 我知道我可以通过做类似的声明 Select from animals where
  • 以编程方式检索所有维基百科语言的列表

    我需要检索某个 wiki 项目的所有现有语言的列表 例如 所有维基导游 https www wikivoyage org or all 维基百科 https www wikipedia org语言 就像他们的登陆页面一样 我更喜欢通过这样做
  • 我在哪里可以获取 Kubernetes 安装中的 API_KEY

    一直在尝试让 kubernetes 的 python 客户端按预期工作 祝你好运config load kube config 现在我想从远程机器使用Python客户端 而远程机器都没有kubectl nor kube config在上面
  • Bootstrap 导航栏折叠点 < 768px

    这是 Bootstrap 3 的一个老问题 gt 更改导航栏的折叠点 但这里建议的方法是 https coderwall com p wpjw4w change the bootstrap navbar breakpoint https c
  • 我的 spring+hibernate 应用程序不关闭 jdbc 连接

    我在生产中有一个 Spring Hibernate Tomcat MySql 应用程序 我遇到了问题 我认为应用程序没有关闭它的 jdbc 连接 当它达到其限制 当前为 200 时 应用程序停止响应 我必须重新启动 tomcat 我需要在某
  • 如何在 Mac 中运行 .jar?

    我写了一个相对简单的java应用程序 我的 PC 上有 JDK 但我需要它在学校的 Mac 上运行 这 jar在我的 PC 上运行完美 但我在 Macintosh 上测试了它 顺便说一句 它没有安装 JDK 为什么mac上不能运行 我怎样才
  • SocketException 现有连接被远程主机强制关闭

    我决定研究一下网络消息传递等 我的第一个调用端口是 UDP 我遇到的问题是当我尝试发送消息时 我试图访问特定端口上的 IP 但应用程序出现错误 SocketException 现有连接被远程主机强制关闭 这是代码 User ME new U
  • 如何使用 Azure 数据工厂管道调用 REST API?

    我想使用 ADF Pipeline 执行具有 oauth 身份验证的 REST API 如果没有 oauth2 我可以调用任何 REST API 所以我的问题是 这个 ADF 管道是否支持带有 oauth2 身份验证的 REST API 如
  • Go 中的测试是并行执行还是一项一项执行?

    我有一个包含单元测试的 Go 文件 其中一些使用公共变量 我正在测试的代码中使用了另一个全局变量 所有这些都可能导致问题 在 Go 中 当我们执行位于同一文件中的测试时 它们如何运行 并行或在上一个完成之前下一个不会开始 默认情况下 所有测
  • C# 对结构的“is”类型检查 - 奇怪的 .NET 4.0 x86 优化行为

    Update 我已经提交了一份错误报告 https connect microsoft com VisualStudio feedback details 558649 c is type check on struct odd net 4
  • 在 Swift 中访问 Objective-C 指针

    我有这个 Objective C 代码片段 我想用 Swift 表达它 CFArrayRef windowList AXUIElementCopyAttributeValue appRef kAXWindowsAttribute CFTyp
  • Json 结果在浏览器中提示“另存为”对话框,而不是被处理。 ASP.NET MVC

    我知道这对其他人来说也是一个问题 但我还没有找到任何可以解决我的问题的方法 我有一个显示在灯箱 颜色箱 中的部分视图 这是一个简单的形式 我希望表单提交并返回一些数据 这些数据将用于调用后续函数 我希望主 DIV 只用 成功 消息进行更新
  • 使用 libx264 压缩一组图像时,为什么帧速率会影响最终输出大小?

    我正在使用 ffmpeg 使用 libx264 编解码器将一组图像编码为短延时视频 我的第一次尝试以 30 FPS 的速度进行编码 使用 ffmpeg r 30 pattern type glob i jpg vcodec libx264
  • SoapUI 更改(禁用)Internet Explorer 的代理设置

    已安装肥皂UI 4 5 1 当我启动soapUI时 它禁用了IE 8中的所有复选框Internet Options gt Connection gt LAN Settings 如果我在soapUI中输入代理 gt File Preferen
  • 如何在 Yii 查询生成器中使用 LIKE

    如何使用 YIi 查询构建器构建此查询 SELECT FROM table WHERE type item 2 AND name item LIke name 我尝试过这样 return Yii app gt db gt createCom
  • .net core应用程序中如何进行基于组的授权?

    净核心应用程序 我的要求是添加基于组的授权 我是 Azure AD 的用户 我属于一些名称以 BR 和 AR 开头的组 属于 AR 组的用户只能访问我的 API 目前我的客户端应用程序是 Swagger 我仅通过 swagger 访问 AP
  • 找不到存储的图像

    我目前正在使用此代码来存储图像 可能是错误的 路径是这样的 public static final String IMAGE DIR test 保存图像的代码如下 public class ImageSaver private String
  • 如何在Python中模拟链式函数调用?

    我正在使用mock http www voidspace org uk python mock 由 Michael Foord 编写的库 用于帮助我在 django 应用程序上进行测试 我想测试我是否正确设置了查询 但我认为我不需要实际访问