防止自定义断言显示在 python unittest 的回溯中

2024-01-01

我想向测试用例添加一些自定义断言方法。作为一个简单的例子,我只是将一个放在下面的测试类中。它按预期工作,但是当生成输出时,回溯在输出中包含自定义断言。

要使其表现得像assertEqual() 所需的步骤是什么? assertEqual 的代码位于 TestCase 中,但引发断言的实际行不会出现在回溯中。我需要做什么才能使 test_something2 的输出看起来更像 test_something1 的输出?

import unittest
class TestCustomAssert(unittest.TestCase):
    def assertSomething(self, s):
        self.assertEqual(s, 'something')
    def test_something1(self):
        self.assertEqual('foo', 'something')
    def test_something2(self):
        self.assertSomething('foo')

if __name__ == '__main__':
    unittest.main()

Output

python3 custom_assert.py 
FF
======================================================================
FAIL: test_something1 (__main__.TestCustomAssert)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "custom_assert.py", line 8, in test_something1
    self.assertEqual('foo', 'something')
AssertionError: 'foo' != 'something'
- foo                                                                                                                    
+ something                                                                                                              


======================================================================                                                   
FAIL: test_something2 (__main__.TestCustomAssert)                                                                        
----------------------------------------------------------------------                                                   
Traceback (most recent call last):                                                                                       
  File "custom_assert.py", line 10, in test_something2                                                                   
    self.assertSomething('foo')                                                                                          
  File "custom_assert.py", line 6, in assertSomething                                                                    
    self.assertEqual(s, 'something')                                                                                     
AssertionError: 'foo' != 'something'                                                                                     
- foo                                                                                                                    
+ something                                                                                                              


----------------------------------------------------------------------                                                   
Ran 2 tests in 0.000s                                                                                                    

FAILED (failures=2)

unittest不打印具有以下内容的帧的回溯__unittest=True在他们的globals.

From unittest.result:

def _is_relevant_tb_level(self, tb):
    return '__unittest' in tb.tb_frame.f_globals

因此,如果您创建一个辅助模块,您可以模拟该行为:

助手.py:

__unittest = True
def assert_stuff(s):
    assert s == 'something', "%s is not something" % s

现在您可以从测试用例中调用这个助手。

我想人们可以制作一个非常简洁的装饰器,使这种魔法在没有辅助模块的情况下更加自动化,但恕我直言,无论如何你都不应该努力减少回溯。

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

防止自定义断言显示在 python unittest 的回溯中 的相关文章

随机推荐

  • 如何将正则表达式的匹配分配给变量?

    我有一个文本文件 其中包含各种条目 每个条目都以包含所有星号的行结束 我想使用 shell 命令来解析该文件并将每个条目分配给一个变量 我怎样才能做到这一点 这是一个示例输入文件 Field1 Lorem ipsum Data to mat
  • 将 VARCHAR 时间戳转换为 TIMESTAMP?

    我在 MySQL 数据库中有一个格式为 17 16 28 Sep 13 2011 PDT 的时间戳 数据库中字段的类型是VARCHAR 我想将这个 VARCHAR 转换为 MySQL 中 TIMESTAMP 类型的字段 我尝试了几个本网站其
  • 如何让 slc 命令在 Ubuntu 上运行?

    我已经使用安装了 Strongloopnpm install g strongloop在我的 Ubuntu 14 04 服务器上 这slc命令不起作用 它说 The program slc is currently not installe
  • 使用实体框架更新外键

    我再次遇到了实体框架的问题唷 我正在尝试使用外键更新表 我在插入时遇到问题 但通过编辑 edmx 文件解决了这个问题 我使用以下代码来更新与角色表具有外部关系的用户表 Domain Data Role role db Role FirstO
  • 使用selenium打开的Chrome页面仍然是空白

    我正在尝试保存网页的屏幕截图 为此我尝试使用 Selenium 问题是 一旦打开网页 URL 中的 data 就会保持空白 这是我的代码 from selenium import webdriver options webdriver Ch
  • 如何以相反的顺序打印文件中的行

    我正在尝试以相反的顺序打印文件 我正在使用数组来保存每行数据 到目前为止 我能够按正常顺序打印每一行 index 是我指的行数 FuncIndex 是同一件事 但已在函数中再次声明 file fopen quotes data r whil
  • 更改 spring-boot 中默认的 Mongo 连接池大小

    我想更改java mongodb驱动程序提供的连接池的默认大小根据 mongo 文档 这是 100 下面是我用来自定义连接池大小的mongo客户端bean 参考这个问题 https stackoverflow com questions 2
  • 解释这个 C 程序的输出

    在以下位置找到此代码C 谜题 http www gowrikumar com c index php include
  • Zend 打开 Zend/Application.php 失败

    好的 我对 Zend 还比较陌生 我创建了一个新的应用程序并开始构建基于的身份验证系统a guide http akrabat com zend auth tutorial 但是 服务器正在排除内部服务器错误 在检查 PHP 错误日志时 我
  • 如何使用System.Net.Mail设置退回邮件地址?

    我正在尝试实施可变信封返回路径 VERP http en wikipedia org wiki Variable envelope return path管理电子邮件地址的方法 即 当我发送的电子邮件被退回时 我希望将其发送到特定的电子邮件
  • 如何在我的 ejs 文件中包含 bootstrap 文件?

    因此 我已经使用 npm bootstrap 3 安装了 bootstrap 但是当我尝试在我的应用程序中包含来自 node modules 的 bootstrap min css 文件时 它在我的控制台中显示此错误 错误信息 在网络选项卡
  • 如何使用 capistrano 3 部署特定修订版

    如何使用 Capistrano 3 部署特定的 git 修订版 Capistrano 2 9 方法不再有效 cap S revision 80655da8d80aaaf92ce5357e7828dc09adb00993 deploy inv
  • 使用特征库从旋转矩阵中获取横摇、俯仰和偏航

    我需要从旋转矩阵中提取横滚 俯仰 偏航角 并且我想确保我所做的事情是正确的 Eigen Matrix lt simFloat 3 1 gt rpy orientation toRotationMatrix eulerAngles 0 1 2
  • 在过滤分支之后将每个人重新基于更改的 git 历史记录

    我们的 git 存储库历史上有一堆不再需要的大文件 我想使用 Pro Git 中解释的过滤分支技术删除它们 http git scm com book en v2 Git Internals Maintenance and Data Rec
  • Zoho API V2 更新记录

    我正在尝试使用 Zoho API 版本 2 在潜在客户中进行简单的记录更新 我使用 PHP 和 CURL 此调用的示例代码 更新记录中的单个字段 如下 apiUrl https www zohoapis com crm v2 Leads v
  • 如何在 Spring 中缩小动态 HTML 响应?

    遵循 Google 的 pagespeed 建议 我希望缩小 Spring 应用程序的 HTML 响应 我指的不是 GZip 而是在发送 HTML 之前从 HTML 中删除注释和空格 我想动态地执行此操作 而不是在我的模板中执行此操作 我的
  • cookiejar 对象可以被 pickle 吗?

    我尝试像这样腌制 CookieJar 对象 import cookielib import pickle dumpFile open cookie dump w cj cookielib CookieJar pickle dump cj d
  • 迭代 Linq 结果时出现奇怪的缓慢现象

    在探索最近的林克问题 https stackoverflow com questions 1582054 handling temporary calculation in linq我注意到该算法似乎相当慢 深入挖掘后 我注意到这不是 li
  • 确定文本字符串中的行数?

    作为打印类的一部分 我希望能够在多个页面上打印长字符串 但我不知道如何计算整个字符串的高度 我将通过首先计算字符串中的行数来确定 我知道我可以计算换行符的数量 但我也使用自动换行 因此每当一行超过页面宽度时就会添加换行符 所以我想我可以计算
  • 防止自定义断言显示在 python unittest 的回溯中

    我想向测试用例添加一些自定义断言方法 作为一个简单的例子 我只是将一个放在下面的测试类中 它按预期工作 但是当生成输出时 回溯在输出中包含自定义断言 要使其表现得像assertEqual 所需的步骤是什么 assertEqual 的代码位于