self.assertRaises 作为上下文管理器,但 msg 参数未按预期工作

2024-05-13

请检查以下代码:

import unittest


CORRECT_MESSAGE = 'Correct message'
WRONG_MESSAGE = 'Wrong message'


def fn():
    raise KeyError(CORRECT_MESSAGE)


class Test(unittest.TestCase):
    def test(self):
        # I am expecting this test to fail as the msg I am
        # checking is WRONG_MESSAGE, and not CORRECT_MESSAGE.
        with self.assertRaises(KeyError, msg=WRONG_MESSAGE):
            fn()


unittest.main()

正如评论中提到的,我预计这个测试会失败,因为我正在检查的消息(WRONG_MESSAGE) 不正确,但测试通过。

我缺少什么?我检查过:断言Raises(异常,*,msg=无) https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaises.


我会回答我自己的问题。


我误解了它的用法msg. From Python 的官方文档 https://docs.python.org/3/library/unittest.html#unittest.TestCase.debug:

所有断言方法都接受 msg 参数,如果指定,则将其用作失败时的错误消息。

它用于调试目的。

e.g.

import unittest


CORRECT_MESSAGE = 'Correct message'
WRONG_MESSAGE = 'Wrong message'


def fn():
    return
    # Don't raise an exception.
    # raise KeyError(CORRECT_MESSAGE)


class Test(unittest.TestCase):
    def test(self):
        with self.assertRaises(KeyError, msg=WRONG_MESSAGE):
            fn()


unittest.main()

在输出中我们将得到:

AssertionError:未引发 KeyError:错误消息

msg当未引发断言错误时使用。


实际的解决方案是使用断言引发正则表达式 https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaisesRegex如果我们想检查异常消息。

e.g.

import unittest


CORRECT_MESSAGE = 'Correct message'
WRONG_MESSAGE = 'Wrong message'


def fn():
    raise KeyError(CORRECT_MESSAGE)


class Test(unittest.TestCase):
    def test_will_pass(self):
        # This will check if the error message is CORRECT_MESSAGE.
        with self.assertRaisesRegex(KeyError, CORRECT_MESSAGE):
            fn()

    def test_will_fail(self):
        # This will check if the error message is WRONG_MESSAGE.
        with self.assertRaisesRegex(KeyError, WRONG_MESSAGE):
            fn()

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

self.assertRaises 作为上下文管理器,但 msg 参数未按预期工作 的相关文章

随机推荐

  • 从 C# 调用非托管 dll。拿2

    我编写了一个 C 程序 它调用一个 C DLL 将命令行参数回显到文件中 当使用 rundll32 命令调用 c 时 它显示命令行参数没有问题 但是当从 c 内部调用它时 它不会显示 我问了这个问题 https stackoverflow
  • 加密 mongodb 中的密码字段

    我有以下代码 它插入userName and password进入数据库 但密码以纯文本格式存储 我的意思是 当我查看数据库时 我可以看到插入的密码 我想存储password in encrypted format MongoClient
  • 在启用滚动的情况下扩展堆栈视图内的 UITextView

    我正在尝试使用自动布局和 Stackview 来实现一些目标 我有一个垂直 Stackview 其中包含 UIView UITextView 和 UIView 如下所示 我已经在这里查看了以前的答案 但找不到一个干净的解决方案来实现此目的
  • 如何在React中处理多个路由器

    假设我们有一个网络应用程序 它通常有很多视图 例如索引页面 管理面板 帮助页面 联系人等 我在主index js 中使用react router dom 来处理它们 它工作得很好 但是现在我在开发管理面板时遇到了问题 它是 index js
  • WPF 和 WCF 应用程序的用户身份验证/授权的“最佳实践”是什么?

    假设我有一个 NET 富客户端 WPF 应用程序 它将同时部署在 3 个不同的场景中 客户端和服务器代码在单个进程中运行 客户端代码在 Intranet 计算机上运行 并通过 WCF 与运行应用程序 域 基础设施代码的服务器计算机进行通信
  • 对象映射器 - YAMLFactory - 由于缺少 _createContentReference 方法而出现异常

    我正在使用最新的 2 13 0 版本的 jackson 当我尝试解析 YAML 文件时 出现此异常 java lang NoSuchMethodError com fasterxml jackson core io ContentRefer
  • 在 UICollectionView 下面插入子视图

    当我在 UICollectionView 下方添加子视图时 有时子视图会显示在 UICollectionView 单元格上方 这是子视图插入代码 self collectionView insertSubview self garmentV
  • 有没有办法分析 WCF 应用程序的性能?

    我们正在尝试测量我们的系统的性能 该系统是一个使用 WCF 调用的 NET 3 5 应用程序 问题是到目前为止 我们无法分析这些调用中的方法 编写了一个 winforms 客户端应用程序来测试我们的系统 我们尝试使用ANTS 4 Profi
  • 如何在 Grails Geb/Spock 测试用例中获取 sessionFactory?

    我想我需要在 GebSpec 测试中刷新 hibernate 会话 所以我想获取 sessionFactory 看起来应该被注入 但是当我做这样的事情时 class MySpec extends GebSpec def sessionFac
  • Flask-Mail - 基于 Flask-Cookiecutter 异步发送电子邮件

    我的烧瓶项目基于烧瓶饼干切割机 https github com sloria cookiecutter flask我需要异步发送电子邮件 发送电子邮件的功能由以下配置米格尔的教程 https blog miguelgrinberg com
  • Puppeteer 无法在 VPS (DigitalOcean) 上工作

    我在水滴中数字海洋 https www digitalocean com 我收到这个错误 node 5549 UnhandledPromiseRejectionWarning TimeoutError Navigation Timeout
  • AngularJS:ng-show 与 display:none

    我有一个用例 我必须使用 CSS 默认隐藏 HTML 元素 如下所示 HTML div class item div CSS item display none 但是 我需要在页面加载后使用 ng show 切换元素的可见性 如下所示 di
  • 如何拦截 .Net 中第三方库对非虚拟方法的调用?

    我认为我需要的是 net 人们称之为 透明动态代理 的东西 但到目前为止我所看到的所有实现 Castle DynamicProxy Spring NET AOP 等 都要求我至少执行以下操作之一 将拦截的方法声明为虚拟方法 包装类并创建包装
  • 如何以编程方式启用小米应用程序的自动启动

    我想知道小米是否可以提供任何应用程序的后台服务 我的应用程序中有需要始终在后台运行的服务 在除小米之外的所有设备中都工作正常 如何以编程方式完成 也适用于小米 oppo vivo 和 oneplus 手机 try Intent intent
  • 删除对象时删除嵌套字段中的索引

    我仍在使用 Firebase 这次我有一个与删除对象相关的问题 我有如下结构 users UsErId1 name Jack email email protected cdn cgi l email protection UsErId2
  • 如何找到 httpd.conf 文件所在的位置?

    如何找到 apache PHP 上 httpd conf 文件的路径 我不知道我的脚本是否会在Windows apache或Linux中运行 我需要知道在哪里可以找到这个文件 以便从那里找到参数 谢谢 我认为它没有接触 PHP 跑步http
  • 如何列出表中的所有列?

    对于各种流行的数据库系统 如何列出表中的所有列 对于 MySQL 请使用 DESCRIBE name of table 只要您使用 SQL Plus 或 Oracle 的 SQL Developer 这也适用于 Oracle
  • 如何修改查询集并将其另存为新对象?

    我需要查询特定模型的一组对象 更改单个属性 列 帐户 然后将整个查询集的对象保存为新对象 行 换句话说 我想复制对象 并在重复项上更改单个属性 帐户 我基本上是创建一个新帐户 然后检查每个模型并将以前帐户的对象复制到新帐户 因此我将使用不同
  • Android 设备选择器在目标列中显示红色 X

    我最近构建了一个 Android 应用程序 minSdkVersion 为 7 targetSdkVersion 为 10 我现在正在使应用程序兼容平板电脑并添加操作栏 因此 我将 targetSdkVersion 更新为 15 并在项目属
  • self.assertRaises 作为上下文管理器,但 msg 参数未按预期工作

    请检查以下代码 import unittest CORRECT MESSAGE Correct message WRONG MESSAGE Wrong message def fn raise KeyError CORRECT MESSAG