是否有一些简单的方法可以使用 nose
捕获记录的消息并对其进行断言?
例如,我希望能够执行如下操作:
cook_eggs()
assert_logged("eggs are ready!")
最佳答案
您可以创建一个自定义处理程序,它可以检查通过日志记录发送的消息。 BufferingHandler非常适合这份工作。
您可能还想在测试中将处理程序附加到您在代码中使用的任何记录器,例如 logging.getLogger('foo').addHandler(...)
。您最终可以在测试用例的 setUp
和 tearDown
方法中附加处理程序。
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/