使用unittest進行測試,它會在每次測試完成後爲「ok」,「error」和「fail」打印「。」,「E」或「F」。我如何關閉它?我使用Python 2.7,這些打印來自內置的亞軍類。 覆蓋這些類聽起來非常困難,因爲它們都是嵌套的。在python unittest中打開一些打印
編輯: 我只想脫掉字符E。和F,因爲它們不會與我測試中的其他日誌同時出現。
使用unittest進行測試,它會在每次測試完成後爲「ok」,「error」和「fail」打印「。」,「E」或「F」。我如何關閉它?我使用Python 2.7,這些打印來自內置的亞軍類。 覆蓋這些類聽起來非常困難,因爲它們都是嵌套的。在python unittest中打開一些打印
編輯: 我只想脫掉字符E。和F,因爲它們不會與我測試中的其他日誌同時出現。
,取決於您所使用的單元測試框架(標準,鼻子......),你有多個方法來減少冗長:
python -m unittest -h
...
-q, --quiet Minimal output
...
的unittest
輸出寫入標準錯誤流,它你可以管別的地方。在* nix框,這將有可能是這樣的:
python -m unittest some_module 2> /dev/null
在Windows中,這應該是這樣的(感謝卡爾Knechtel):
python -m unittest some_module 2> NUL
如果運行的Python測試,你可以簡單地更換stderr
流這樣的:
import sys, os
sys.stderr = open(os.devnull, 'w')
... # do your testing here
sys.stderr = sys.__stderr__ # if you still need the stderr stream
由於您只是要關閉。,F,E符號的更新,因此您也可以通過覆蓋默認的類來創建自己的TestResult
類。在我的情況(Python 2.6中),這將是這樣的:
import unittest
class MyTestResult(unittest._TextTestResult):
def addSuccess(self, test):
TestResult.addSuccess(self, test)
def addError(self, test, err):
TestResult.addError(self, test, err)
def addFailure(self, test, err):
TestResult.addFailure(self, test, err)
這有效地關閉了字符的打印,但保持默認功能。
現在我們還需要一個新的TestRunner
類和重寫_makeResult
方法:
class MyTestRunner(unittest.TextTestRunner):
def _makeResult(self):
return MyTestResult(self.stream, self.descriptions, self.verbosity)
有了這個亞軍你現在可以享受一個日誌免費檢測。
只是說明:不幸的是,從命令行不可能這樣做。
有點遲到的反應,但有人可能會覺得它有用。 你可以轉動。 E和F關閉的詳細級別設置爲0:
testRunner = unittest.TextTestRunner(verbosity = 0)
你仍然會有最終結果,並在在標準錯誤的測試結束時可能出現的錯誤/異常。
在Python 2.4和2.7中測試。
你爲什麼要這樣做?當然,看到測試的進展很有幫助嗎? – 2011-12-15 09:47:57
在我的情況下,它增加了混淆,因爲我的測試並行運行,我打印1條日誌消息,並且這些測試日誌消息未與相應的「E」「F」或「。」同步。 。 – swan 2011-12-15 17:12:39
如何在分離輸出流的獨立進程中運行這些測試? – 2013-02-06 14:03:32