Python 单元测试输出数据

2024-04-11

如果我用 Python 编写单元测试(使用 unittest 模块),是否可以输出失败测试的数据,以便我可以检查它以帮助推断导致错误的原因?

我知道创建自定义消息的能力,它可以携带一些信息,但有时您可能会处理更复杂的数据,这些数据无法轻松表示为字符串。

例如,假设您有一个 Foo 类,并且正在使用名为 testdata 的列表中的数据来测试方法 bar:

class TestBar(unittest.TestCase):
    def runTest(self):
        for t1, t2 in testdata:
            f = Foo(t1)
            self.assertEqual(f.bar(t2), 2)

如果测试失败,我可能想输出 t1、t2 和/或 f,以了解为什么此特定数据导致失败。通过输出,我的意思是在运行测试后可以像任何其他变量一样访问变量。


我们为此使用日志记录模块。

例如:

import logging
class SomeTest( unittest.TestCase ):
    def testSomething( self ):
        log= logging.getLogger( "SomeTest.testSomething" )
        log.debug( "this= %r", self.this )
        log.debug( "that= %r", self.that )
        self.assertEqual( 3.14, pi )

if __name__ == "__main__":
    logging.basicConfig( stream=sys.stderr )
    logging.getLogger( "SomeTest.testSomething" ).setLevel( logging.DEBUG )
    unittest.main()

这使我们能够针对已知失败且需要额外调试信息的特定测试打开调试。

然而,我首选的方法不是花费大量时间进行调试,而是编写更细粒度的测试来暴露问题。

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

Python 单元测试输出数据 的相关文章

随机推荐

  • 延迟加载插件 (jQuery)

    a lightbox hover function if jQuery lightbox required otherwise lightbox js will be loaded on hover each time a lightbox
  • 我的 CryptoJS 加密/解密不起作用

    我有一个 JSON 数组数组 我尝试使用 CryptoJS 对其值进行加密 然后打印以在另一个文件中使用 其中这些值应使用用户给定的密码进行解密 但我做错了什么 在解密 URL 时收到 未捕获错误 格式错误的 UTF 8 数据 加密 js
  • 将时间列拆分为开始时间/结束时间列

    我有一张表格 其中包含有关他们全天所做工作的信息 我需要获取每个任务的开始时间 结束时间 目前 我能够提取每个任务的时间戳 但我希望创建 开始时间 和 结束时间 列 开始时间是前一行的时间戳 结束时间是当前行的时间戳 有什么简单的方法可以做
  • iOS - WebView 和字符串

    我有一个名为 htmlString 的字符串 其中包含一些 html 格式的信息 我需要将这些信息放入加载整个 html 字符串 包含颜色和字体 的 webView 中 我需要知道弦的高度 我能怎么做 你想做类似的事情 webView lo
  • 检查表达式树中的类型转换?

    我正在使用 Expression 创建一些动态生成的代码 我的解决方案有效 但有一个功能除外 我想要进行检查类型转换 如果转换失败 则会抛出 TypeCastException 我找到了 Expression TypeAs 它执行类型转换
  • 将 iOS 9 Today 扩展转换为 iOS 10 的尺寸问题

    晚上好 我在理解今天的扩展时遇到了很大的问题 我读过很多教程和介绍 但没有任何帮助我理解这个问题 在 iOS 9 上 该扩展可以正常工作 在 iOS 10 上则不行 我的大问题是 iOS 10 中小部件的自动调整大小 在 iOS 9 上 小
  • 如何将引导程序形式的输入与输入组插件对齐?

    我有一个非常简单的 Bootstrap 3 表单 当我不使用它时 我可以轻松 自动 对齐input group addons 在我的表单中使用它们后 无法对齐它 由于添加了插件 带有插件的线更宽
  • 了解 cassandra 复制因子与一致性级别

    我想澄清 Cassandra 中复制因子和一致性级别的基本概念 如果有人可以回答以下问题 我们将不胜感激 RF 复制因子 RC 读一致性 WC 写一致性 2 个 cassandra 节点 例如 A B RF 1 RC ONE WC ONE
  • 将 Tor 与 scrapy 框架结合使用

    我正在尝试抓取网站 该网站足够复杂以阻止机器人 我的意思是它只允许几个请求 之后 Scrapy 挂起 问题1 有没有办法 如果Scrapy挂起 我可以从同一点重新启动我的爬行过程 为了摆脱这个问题 我这样写了我的设置文件 BOT NAME
  • Haskell:集合上的递归函数

    我是 Haskell 的新手 我正在尝试编写一个 有点 基本的递归函数来生成集合的分区 我正在引用这个维基页面 https en wikipedia org wiki Partition of a set https en wikipedi
  • 使用 gee() 拟合模型时出错:外部函数调用中出现 NA/NaN/Inf (arg 3)

    我正在一个包含 13 500 个观察值 这里是学生 的数据集上拟合一个 gee 模型 学生被分为 52 个不同的学校 我知道有证据表明学生嵌套在学校内 低 ICC 因此我应该在方差协方差矩阵中调整这种嵌套效应 我打算做的是首先安装一个具有可
  • 将 ls 输出转换为 csv

    我将如何转换 find ls gt tmp files txt 这给了我类似的东西 908715 40 rwxrwxr x 1 david staff 16542 Nov 15 14 12 dump info py 908723 0 drw
  • 将两个 PDF 页面合并为新页面,文本内容之间不留空格

    all 我想将两个 PDF 合并为一个 PDF 与此同时 我想无缝地加入这两个 PDF 例如 假设第一个PDF文件的最后一页有很多空白 合并后 我希望第二个PDF从第一个PDF的空白开始 我们有任何工具支持吗 这是一项并不难的任务 假设我们
  • 使用 xmllint 添加属性

    我想向标签添加一个属性 使用xmllint 我可以通过 xmllint 做到这一点吗 Xmllint 不是用来编辑 XML 的 所以我认为答案是 不 你不能 要编辑 XML 您可以使用 XMLStarlet 向现有 XML 文档添加属性的语
  • 无法从视图中的异步方法返回值

    我正在尝试从中返回值asynchtml 帮助器 但它给出以下字符串而不是所需的值 System Threading Tasks Task WhenAllPromise 1 System Decimal Method public async
  • 由于 zend 路线,zend 导航无法工作

    EDIT 该问题是由于 zend 路由引起的 请检查更新 我正在使用 xml 文件进行导航 编辑 以下代码来自layout phtml文件 config new Zend Config Xml APPLICATION PATH config
  • 您可以从 EntityListener 访问 EntityManager 吗?

    我知道 JSR 000220 Enterprise JavaBeans 3 0 Final Release 持久性 规范指出 一般来说 便携式应用程序不应调用 EntityManager 或查询操作 访问其他实体实例 或修改生命周期回调方法
  • 安装 Laravel 时出现错误:“./composer.json 不可写。”

    这是我运行的命令 composer global require laravel installer 这是我之后得到的文本和错误 Changed current directory to home dimitar composer comp
  • 使用 OpenCV 改进图像中的矩形轮廓检测

    我正在尝试检测给定图像中的矩形框 Original image but the image is not good enough to detect rectangles how can i improve it and detect al
  • Python 单元测试输出数据

    如果我用 Python 编写单元测试 使用 unittest 模块 是否可以输出失败测试的数据 以便我可以检查它以帮助推断导致错误的原因 我知道创建自定义消息的能力 它可以携带一些信息 但有时您可能会处理更复杂的数据 这些数据无法轻松表示为