在單元測試文檔[http://docs.python.org/2/library/unittest.html#unittest.main],我看到所描述的以下的方法簽名:python unittest - 使用'緩衝'選項來抑制標準輸出 - 我該怎麼做?
unittest.main([module[, defaultTest[, argv[, testRunner[, testLoader[, exit[, verbosity[, failfast[, catchbreak[, buffer]]]]]]]]]])
最後一個選項是「緩衝」。該文檔解釋了有關此選項的以下內容:
failfast,catchbreak和buffer參數與同名命令行選項具有相同的效果。
爲命令行選項[http://docs.python.org/2/library/unittest.html#command-line-options]解釋「緩衝」如下的文檔:
-b,--buffer
標準輸出和標準錯誤流在測試期間緩衝跑。丟棄通過測試期間的輸出。輸出在測試失敗或錯誤時正常回顯並被添加到失敗消息中。
我有下面的演示代碼沒有表現出預期的行爲:
import unittest2
class DemoTest(unittest2.TestCase):
def test_one(self):
self.assertTrue(True)
def test_two(self):
self.assertTrue(True)
if __name__ == '__main__':
test_program = unittest2.main(verbosity=0, buffer=True, exit=False)
這個程序的輸出是:
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
事實上,我得到的如果我將我的程序中的最後一行改爲:
test_program = unittest2.main(verbosity=0, buffer="hello", exit=False)
我在做什麼錯? (我嘗試使用unittest
而不是unittest2
,但它沒有區別。)
你想看什麼?這看起來完全正確 - 它是測試套件本身的輸出,沒有測試代碼的輸出。這正是'緩衝區'的存在,並且它的工作完美。 (在你的情況下,它也是平凡的工作 - 你的代碼不會打印任何東西,所以'buffer'沒有任何緩衝區,這就是爲什麼你沒有它就得到相同的結果。)如果你想要一些不同的東西,請告訴我們_你想要什麼。 – abarnert
我不想看到任何輸出。文檔說「通過測試期間的輸出被丟棄」。如果測試失敗,我希望只看到輸出。由於我是通過cron運行的,所以即使是單個字符的輸出也是不可接受的,因爲它會導致發送電子郵件。因此,例如,「OK」這個詞不應該出現。 – jononomo
好的,我明白現在發生了什麼。基本上,程序仍然會產生輸出,而不是測試方法中產生的輸出。 – jononomo