python + Nose : make assertions about logged text?

标签 python testing logging nose

是否有一些简单的方法可以使用 nose 捕获记录的消息并对其进行断言?

例如,我希望能够执行如下操作:

cook_eggs()
assert_logged("eggs are ready!")

最佳答案

您可以创建一个自定义处理程序,它可以检查通过日志记录发送的消息。 BufferingHandler非常适合这份工作。

您可能还想在测试中将处理程序附加到您在代码中使用的任何记录器,例如 logging.getLogger('foo').addHandler(...)。您最终可以在测试用例的 setUptearDown 方法中附加处理程序。

import logging
import logging.handlers

class AssertingHandler(logging.handlers.BufferingHandler):

    def __init__(self,capacity):
        logging.handlers.BufferingHandler.__init__(self,capacity)

    def assert_logged(self,test_case,msg):
        for record in self.buffer:
            s = self.format(record)
            if s == msg:
                return
        test_case.assertTrue(False, "Failed to find log message: " + msg)


def cook_eggs():
    logging.warn("eggs are ready!")


import unittest

class TestLogging(unittest.TestCase):

    def test(self):
        asserting_handler = AssertingHandler(10)
        logging.getLogger().addHandler(asserting_handler)
        cook_eggs() 
        asserting_handler.assert_logged(self,"eggs are ready!")
        logging.getLogger().removeHandler(asserting_handler)


unittest.main()

关于 python + Nose : make assertions about logged text?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085257/

相关文章:

android - 使用 Adb 输入时记录按键事件

python - 创建矩阵,并按间隔在每个单元格上添加标签

python - 分配给看起来像元组的东西时创建的变量的生命周期

python - 如何在 Keras 中使用高级激活层?

python - 在 Tornado 中保留 websocket 连接列表

asp.net - Acunetix 网络扫描

unit-testing - 基本 block 覆盖——准确的定义是什么?

java - 在 AWS 服务器实例中启动 tomcat 7 时,未创建 log4j 新日志文件

testing - 删除 Clojure REPL 中定义的测试

scala - 保证系统关闭时 Akka 中的日志输出刷新?