当前位置: 首页 > 面试题库 >

在鼻子下面测试Python代码时应如何验证日志消息?

盛柏
2023-03-14
问题内容

我正在尝试编写一个简单的单元测试,以验证在特定条件下我的应用程序中的类将通过标准日志记录API记录错误。我想不出最干净的方法来测试这种情况。

我知道鼻子已经通过它的日志记录插件捕获了日志输出,但这似乎旨在作为失败测试的报告和调试辅助工具。

我可以看到两种方法:

  • 以零散方式(mymodule.logging =模拟日志模块)或使用适当的模拟库来模拟日志记录模块。
  • 编写或使用现有的鼻子插件捕获输出并进行验证。

如果我采用前一种方法,那么我想知道在嘲笑日志记录模块之前将全局状态重置为当前状态的最干净方法是什么。

期待您对此的提示和技巧…


问题答案:

我曾经模拟过记录程序,但是在这种情况下,我发现最好使用记录程序处理程序,因此我根据jkp建议的文档(现已死亡,但已缓存Internet
Archive上
)编写了这个程序

class MockLoggingHandler(logging.Handler):
    """Mock logging handler to check for expected logs."""

    def __init__(self, *args, **kwargs):
        self.reset()
        logging.Handler.__init__(self, *args, **kwargs)

    def emit(self, record):
        self.messages[record.levelname.lower()].append(record.getMessage())

    def reset(self):
        self.messages = {
            'debug': [],
            'info': [],
            'warning': [],
            'error': [],
            'critical': [],
        }


 类似资料:
  • cmf_verification_code_log($account, $code, $expireTime = 0) 功能 更新手机或邮箱验证码发送日志 参数 $account: string 手机或邮箱 $code: string 验证码 $expireTime: string 过期时间 返回 int 影响行数

  • cmf_verification_code_log($account, $code, $expireTime = 0) 功能 更新手机或邮箱验证码发送日志 参数 $account: string 手机或邮箱 $code: string 验证码 $expireTime: string 过期时间 返回 int 影响行数

  • 问题内容: 有什么原因导致Nose在Ubuntu 9.04中找不到测试? 我正在使用鼻子0.11.1和python 2.5.4。 只有明确指定文件名,我才能运行测试。如果我没有指定文件名,它将显示 0个测试 。 相同的项目在Mac上可以很好地运行测试,所以我很困惑! 问题答案: 一些相关的东西,如果您正在目录之外运行测试,即 其中tests是我的测试文件夹的名称,并且在.py模块之一中具有单独的p

  • 我能得到第二个和第三个条件的承保范围,但不能得到最后一个和第一个条件的承保范围。 下面这个是我的测试函数

  • 对于一个开源项目来说,文档和测试都是必不可少的组成部分,没有足够测试和文档覆盖率的 “开源项目”就是一坨垃圾!当然,对于某些能够做到自文档的大神来说, 文档可以是不必要的,但测试依旧是代码质量的保证。 优秀的测试通常遵循一下基本规章: 每个测试单元应该关注于一个功能,并保证其正确性。 测试单元之间应该尽可能独立,也就是说可以独立运行,与顺序无关。 测试的速度应该尽可能快,过慢的测试速度会成为开发的

  • 我正在开发一个简单的桌面应用程序(不是webapp)。 它们有不同的模式。好像他们忽略了我的设置。 我也试着应用我在这里找到的建议: https://spring.io/blog/2009/12/04/logging-dependencies-in-spring

  • 问题内容: Python的NOSE测试框架具有并行运行多个测试的概念。 这样做的目的不是要测试代码中的并发性,而是要对“没有副作用,没有排序问题并且没有外部依赖项”的代码进行测试,以使其运行更快。性能提高来自于并发I / O等待访问不同设备,更好地使用多个CPU /内核以及并行运行time.sleep()语句。 我相信,通过使用插件Test Runner,可以使用Python的unittest测试

  • 问题内容: 我想让用户输入日期,例如: 然后确保输入的是有效日期。我不太在乎日期格式。 感谢您的任何投入。 问题答案: 您可以使用模块的功能: 请注意,在Python 2.x中,您需要使用而不是。