我有一堆单元测试,其中一个我想捕获哪些日志输出到一个变量(意味着它不应该对运行测试的人可见)。在我开始考虑这样做之前,我一直试图让一个简单的测试用例起作用:
import logging
import sys
from cStringIO import StringIO
logging.basicConfig(stream=sys.stderr)
logger = logging.getLogger(__name__)
class Abc():
@staticmethod
def pr():
logger.setLevel("WARN")
old_stderr = sys.stderr
sys.stderr = mystderr = StringIO()
logger.warn('bla bla bla')
sys.stderr = old_stderr
print mystderr.getvalue()
if __name__ == '__main__':
Abc.pr()
但事实并非如此。它输出:
WARNING:__main__:bla bla bla
(empty line from print)
我做错了什么?
答案 0 :(得分:1)
CausesValidation = true
是指向对象的指针。因此,首先调用CausesValidation = false
会将记录器的流设置为有效流。
稍后更改为Validating
只会更改sys.stderr
指向的内容,但不会更改记录器内的内容。
我建议如下:
logging.basicConfig(stream=sys.stderr)