模拟单元测试引发“停止调用未启动的修补程序”错误

2023-12-12

当运行下面的测试时,我得到了stop called on unstarted patcher.

def test_get_subvention_internal_no_triggered_admission(self):
    billing_cluster = BillingClusterFactory()
    subvention = SubventionFactory(billing_cluster=billing_cluster)
    convive_sub = ConviveFactory(subvention=subvention, billing_cluster=billing_cluster)
    order_5 = OrderFactory(beneficiary=convive_sub)
    order_operation_5 = CreationOrderOperationFactory(order=order_5)

    with patch('orders.models.Order.subvention_triggered_same_day', return_value=True):
        with patch('builtins.hasattr', return_value=False):
            self.assertIsNone(order_operation_5._get_subvention())

我在堆栈溢出上阅读了有关此错误的内容,并得出结论,我应该避免模拟相同的内容(堆叠模拟)。但这不是我在这里做的事情。我正在嵌套模拟,并且看来没问题.

如果我反转返回值(第一个模拟返回 False,第二个返回 True),则测试效果良好。

任何想法? 谢谢。


简而言之,你不能patch the builtins func hasattr

patch('builtins.hasattr', return_value=False)

原因:被使用mock.py

if not _is_started(self):
    raise RuntimeError('stop called on unstarted patcher')

def _is_started(patcher):
    # XXXX horrible
    return hasattr(patcher, 'is_local')

重复错误:

@mock.patch('__builtin__.hasattr')
def test_mock_hasattr(self, mocked_hasattr):
    # as long as it is set to False, it will trigger
    mocked_hasattr.return_value = False

嘲笑一个builtins里面的功能models.py:

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

模拟单元测试引发“停止调用未启动的修补程序”错误 的相关文章

随机推荐

  • MVC3音乐商店教程连接字符串问题

    我正在学习 MVC 音乐商店教程 当我尝试使用实体框架模型连接到数据库时遇到问题 我已经尝试了许多这样的演练 当我到达这一部分时 我仍然遇到问题 我不想使用 SQL Compact Edition 尽管我尝试安装它只是为了让教程正常工作 相
  • 在 Woocommerce 中显示链接的产品属性术语名称

    这是我的代码 用于在产品标题下方显示属性 如何将其显示为该属性的存档页面的链接 add action woocommerce single product summary custom template single title 5 fun
  • FFMPEG - 批量提取媒体持续时间并写入文本文件

    我的一个文件夹中有十个媒体文件 我想创建一个包含两列的文本文件 文件名及其持续时间 秒 video1 mp4 300 seconds video2 mp4 360 seconds video3 mp4 420 seconds audio10
  • 解压缩列表的谓词

    List1 x 1 y 1 z 1 我正在尝试拆分此列表 分为两个列表 List3 x y z List4 1 1 1 所以我写了这个谓词来尝试做到这一点 splt splt X Xs Y Ys X Y Zs splt Xs Ys Zs 然
  • Ionic 3 中的 Android SDK Platform 26 许可证错误

    我正在尝试在我的 Android 设备上运行我的 Ionic 3 项目ionic cordova run android device stacktrace 但是 我有以下输出 检查包 Android SDK Platform 26 的许可
  • HttpException:400 无法验证您的数据提交

    我的日志文件充满了这些错误 2021 11 19 12 39 42 27 xxx xxx xxx 1958 gi96uqh6atadlbsg2ksjfltd9e error yii web HttpException 400 yii web
  • 获取非子进程的退出代码

    我正在寻找如何从非子进程获取退出代码 众所周知 很少有函数可以与子进程一起使用 例如 wait waitpid 通过这个函数 我们可以等到子进程关闭并获取退出错误代码 但这仅适用于子进程 实际上我正在寻找 Windows 类似的获取退出代码
  • 将列表转换为矩阵

    我整个下午都在做一件简单的事情 但由于某种原因似乎无法正确完成 如何将列表转换为给定宽度的矩阵 例子 我得到了一个清单 例如 1 3 5 7 6 8 9 0 并想要创建一个矩阵 例如 1 3 5 7 6 8 9 0 通过谓词 list2ma
  • 如何将 Room TypeConverter 应用于实体的单个字段?

    我一直在尝试不同的解决方案来应用TypeConverter到房间数据库实体的单个字段 但我收到错误 Cannot figure out how to save this field into database You can conside
  • 从 C++ 拦截 Fortran STOP

    我准备了一个与旧版 Fortran 库的 C 接口 遗留库中的一些子例程遵循丑陋但可用的状态代码约定来报告错误 并且我使用此类状态代码从我的 C 代码中抛出可读的异常 它工作得很好 另一方面 有时遗留库会调用STOP 终止程序 即使病情可以
  • Flutter 导航栏 - 从另一个页面更改选项卡

    我希望能够以编程方式更改导航栏选项卡 我在 Page1 中有一个导航到 Page2 的按钮 当我执行此操作时 导航栏消失 因为我没有使用导航栏选择 page2 我有 4 个 dart 文件 分别是 navigationbar dart pa
  • 背景尺寸覆盖IE11未覆盖整个区域

    我要发疯了 IE11 拒绝用背景图像填充 DIV 的整个区域 即使我已将背景大小属性设置为 cover 考虑以下示例 CSS bg width 100 min height 220px background url bg jpg cente
  • WAMPServer phpMyadmin 超出最大执行时间 360 秒

    我刚刚安装了WampServer 当我访问我的项目页面时它有效 但是当我尝试导航 phpMyAdmin 时 我收到此错误 超过最大执行时间 360 秒 问题是什么 这里更好的解决方案是更改控制 phpMyAdmin 的配置 而不是更改php
  • 为按钮提供相等宽度约束时,自动布局未正确设置

    我看到很多解决方案并应用了自动布局约束 但我仍然没有得到所需的解决方案 当前结果 给予所有按钮的约束 查看层次结构 假设您想要的是让 3 个按钮彼此相等并使用 Interface Builder 填充屏幕宽度 没有代码 即 不以编程方式 这
  • 允许基于范围的 For 与枚举类吗?

    我有一个经常出现的代码块 我在其中循环了一个的所有成员enum class The for与新的相比 我目前使用的循环看起来非常笨重range based for 有没有办法利用新的 C 11 功能来减少我当前的冗长内容for loop 我
  • p:media 包含 PDF 文件会导致“文件不以 '%PDF-' 开头。” IE7 出现错误

    我在用着
  • 返回 true 或 false 或抛出异常 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 java version 1 7 0 75 Hello 只是想知道比较以下两个函数的首选最佳实践是什么 第一个抛出 NullPointerException 应在调用函数中捕获该异常 如果
  • 如何在 Android 中的视图上收听双击? [复制]

    这个问题在这里已经有答案了 我想检测一个doubletap在视图上 例如button 然后知道它是哪个视图 我见过这个类似的问题但他们说这是重复的问题似乎并没有回答我的问题 我所能做的一切find是添加一个GestureDetector到活
  • onActivityResult 的intent.getPath() 没有给我正确的文件名

    我正在尝试以这种方式获取文件 final Intent chooseFileIntent new Intent Intent ACTION GET CONTENT String mimetypes application pdf choos
  • 模拟单元测试引发“停止调用未启动的修补程序”错误

    当运行下面的测试时 我得到了stop called on unstarted patcher def test get subvention internal no triggered admission self billing clus