我正在使用PyDev進行Python應用程序的開發和單元測試。 至於單元測試,一切工作都代表了內容記錄到任何日誌記錄的事實。記錄器不被PyDev的「捕獲輸出」捕獲。PyDev單元測試:如何捕獲記錄到「捕獲的輸出」中的logging.Logger的文本
我已經着一切記錄到這樣的標準輸出:
import sys
logger = logging.getLogger()
logger.level = logging.DEBUG
logger.addHandler(logging.StreamHandler(sys.stdout))
儘管如此,「捕獲輸出」不顯示的東西記錄到記錄器。
這裏的示例單元測試腳本:test.py
import sys
import unittest
import logging
logger = logging.getLogger()
logger.level = logging.DEBUG
logger.addHandler(logging.StreamHandler(sys.stdout))
class TestCase(unittest.TestCase):
def testSimpleMsg(self):
print("AA")
logging.getLogger().info("BB")
控制檯輸出是:
Finding files... done.
Importing test modules ... done.
testSimpleMsg (itf.lowlevel.tests.hl7.TestCase) ... AA
2011-09-19 16:48:00,755 - root - INFO - BB
BB
ok
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
但是CAPTURED OUTPUT用於測試的是:
======================== CAPTURED OUTPUT =========================
AA
有沒有人知道如何在執行這個測試期間捕獲所有記錄到logging.Logger
?
爲了完整:我需要爲所有單元測試進行重定向。對我來說最好的解決方案是在setUp-method中添加新的處理程序,並在tearDown方法中刪除它。 – gecco
很好的回答,我[擴展](http://stackoverflow.com/a/15969985/321973)這是一個'__metaclass__',這樣一個包裝的'setUp'和'tearDown'自動包含這個 –
爲什麼添加/刪除處理程序而不是將其保留在測試用例之外? – mlt