如何在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中模拟链式函数调用? 的相关文章

随机推荐

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

    我想找到所有列的名称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 应用程序上进行测试 我想测试我是否正确设置了查询 但我认为我不需要实际访问