如何使用 Python Mock 引发异常 - 但将 Errno 设置为给定值

2023-11-27

给定以下 Python 代码:

elif request.method == 'DELETE':
    try:
        os.remove(full_file)
        return jsonify({'results':'purged %s' % full_file})

    except OSError as e:
        if e.errno != errno.ENOENT:
            raise

        return jsonify({'results':'file not present: %s' % full_file})

我想测试所有可能的路径,包括异常处理。使用 Mock,很容易raise一个例外,我用这段代码来做:

with patch('os.remove', new=Mock(side_effect=OSError(errno.ENOENT))):
    self.assertRaises(OSError, self.app.delete, file_URL) # broken

Mock 引发异常,其打印值为 2 (ENOENT) - 但是e.errno设置为“无”。而且到目前为止,我还没有找到设置的方法。结果是,总是出现异常重新加注,并且在单元测试中我从未到达最后一行代码。

我还尝试创建一个带有 errno 设置的虚拟类,然后返回它。但除非它设置了要调用的 *side_effect* ,否则它不会引发异常,并且当我设置 side_effect 时,我不会将 object.errno 作为返回值。

有没有办法让 Mock 引发异常,其中该异常对象具有errno属性设置?


将两个参数传递给 OSError 构造函数。 (第一个应该是errno).

例如:

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

如何使用 Python Mock 引发异常 - 但将 Errno 设置为给定值 的相关文章

随机推荐

  • 在 .NET 3.5 中使用反射生成子类列表

    在运行时 我想指定一个父类 然后程序将生成所有子类的列表 无论多少代 例如 如果我有Entity作为父母 并且Item Entity and Actor Entity 将有两个字符串 Actor 和 Item 我看到System Refle
  • 如何向 log4j 消息添加前缀(在对象级别)

    我使用 log4j2 我想为我的所有消息添加前缀 该前缀被传递给构造函数参数 它取决于类的实例 所以我们处于对象级别 而不是类或线程 例如 我有一个A类实例化就像new A 152 所以当我使用log error message 在这堂课上
  • 有没有办法强制 ASP.NET Web API 返回纯文本?

    我需要从 ASP NET Web API 控制器获取纯文本响应 我尝试过提出请求Accept text plain但它似乎并没有达到目的 此外 该请求是外部的 不受我的控制 我要完成的是模仿旧的 ASP NET 方式 context Res
  • 从基类访问子类的静态成员

    我有以下基类 class BaseClass public static myFlag boolean false constructor reference ChildClass myFlag 与儿童班 class ChildClass
  • 当我在 Chrome 中单击“允许”时,为什么 getUserMedia 会抛出 [object NavigatorUserMediaError]?

    最近 我在尝试通过我的网站访问客户的麦克风时开始出现错误 当Chrome询问是否允许网站访问用户的麦克风时 object NavigatorUserMediaError 无论他们点击 允许 还是 拒绝 都会产生 无论麦克风是否实际插入计算机
  • 在Python中分割分号分隔的字符串

    我想分割一个以分号分隔的字符串 以便我可以使用 Python 存储每个单独的字符串 以用作 XML 标记之间的文本 字符串值如下所示 08 26 2009 08 27 2009 08 29 2009 它们只是存储为字符串值的日期 我想迭代每
  • iOS:带有按钮图像的导航栏

    我想创建一个导航栏 其中图像作为导航栏右侧的按钮 像下面的快照 我怎样才能实现这个目标 希望这可以帮助 viewController navigationItem titleView UIImageView alloc initWithIm
  • 如何在 Go 中获取文件的组 ID (GID)?

    os Stat 返回一个FileInfo对象 它有一个Sys 返回一个方法Interface 没有方法 虽然我有能力fmt Printf 它 看到 Gid 我无法以编程方式访问 Gid 我如何在这里检索文件的 Gid file info o
  • 用不同的颜色填充水平线上方和下方的区域[重复]

    这个问题在这里已经有答案了 Aim 我正在尝试填充 R 中 ggplot 生成的图中两条线之间的区域 我想用与水平线下方不同的颜色填充水平线上方的线之间的所有内容 我成功地用单一颜色填充了两条线之间的所有内容 但是 我无法用两种不同的颜色区
  • 通过 PHP 使用 R

    我对 R 比较陌生 对 Linux Ubuntu 命令行也很陌生 我正在尝试用 PHP 编写一个页面 其中包含我想在 R 中执行的命令 然后将结果传回以便能够使用它们 我尝试了下面代码的变体 但我只得到 R 欢迎消息作为我的输出 当我在命令
  • 完成后如何杀死 doMC 工作人员?

    doMC 的文档似乎非常稀疏 仅列出了 doMC package 和 registerDoMC 我遇到的问题是我将通过 doMC foreach 生成几个工作人员 但是当工作完成后 他们只是坐在那里占用内存 我可以去寻找他们的进程ID 但我
  • 如何配置 Play! 2.4.2 HTTPS 密钥库?

    我是 Play Framework 的新手 只是尝试在 Java 8 上首次使用 2 4 2 来使用 HTTPS 我可以让它使用默认密钥库 但不能使用我自己的密钥库 我配置了working默认密钥库位于build sbt javaOptio
  • Android 版 Google 地图 V2 上圆圈上的 LatLng 点

    I need to store all the LatLng points of circle drawn on google map like 我有圆和半径 以米为单位 如何得到那个 我尝试使用代码 private ArrayList
  • 重置数据表中的自动增量

    我填充一个DataSet with a DataAdapter to a SQL CE数据库 数据显示在DataGrid它绑定到 DataSet 的 DataTable 我有一个自动递增 ID 字段 或在 SQLCE 中 称为PRIMARY
  • UITableViewCells 中的图像加载错误

    我正在开发一个应用程序 我想在带有自定义单元格的 UITableView 中显示几乎与屏幕大小一样大的图像 图像加载良好 有点慢 但它们加载了 但是当我在 TableView 中滚动时 它们出现在错误的单元格中 例如 单元格 5 中的 Im
  • ASP.Net MVC 将标签值回发到您的控制器

    使用 EditorTemplate 时 如果我希望模型上的值显示在屏幕上 同时又发布回控制器 我应该使用什么助手 IE 如果我使用 TextBoxFor Html TextBoxFor model gt model RoomTypeName
  • 如何使用指针从不同的函数访问局部变量?

    我可以访问不同函数中的局部变量吗 如果是这样 怎么办 void replaceNumberAndPrint int array 3 printf i n array 1 printf i n array 1 int getArray int
  • Oct2Py 仅返回第一个输出参数

    我使用 Oct2Py 是为了在我的 Python 代码中使用一些 M 文件 假设我有这个简单的 Matlab 函数 function a b toto c a c b c 1 end 如果我在 Octave 中调用它 会发生什么显然是 gt
  • 当没有任何变化时如何强制更新 MySQL 记录

    我的数据库表有一列定义要使用ON UPDATE CURRENT TIMESTAMP 字段 last access 类型 时间戳 整理 属性 更新 CURRENT TIMESTAMP Null No 默认值 CURRENT TIMESTAMP
  • 如何使用 Python Mock 引发异常 - 但将 Errno 设置为给定值

    给定以下 Python 代码 elif request method DELETE try os remove full file return jsonify results purged s full file except OSErr