python unittest - 使用'buffer'选项来抑制stdout - 我该怎么办?

jon*_*omo 6 python unit-testing

在unittest docs [ http://docs.python.org/2/library/unittest.html#unittest.main ]中,我看到了以下描述的方法签名:

unittest.main([module[, defaultTest[, argv[, testRunner[, testLoader[, exit[, verbosity[, failfast[, catchbreak[, buffer]]]]]]]]]])
Run Code Online (Sandbox Code Playgroud)

最后一个选项是"缓冲区".文档解释了有关此选项的以下内容:

failfast,catchbreak和buffer参数与同名命令行选项具有相同的效果.

命令行选项的文档[ http://docs.python.org/2/library/unittest.html#command-line-options ]解释'缓冲区'如下:

-b, -
缓冲区在测试运行期间缓冲标准输出和标准错误流.通过测试期间的输出被丢弃.输出在测试失败或错误时正常回显,并添加到失败消息中.

我有以下演示代码,它没有表现出预期的行为:

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)
Run Code Online (Sandbox Code Playgroud)

该程序的输出是:

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
Run Code Online (Sandbox Code Playgroud)

事实上,如果我将程序中的最后一行改为:

test_program = unittest2.main(verbosity=0, buffer="hello", exit=False)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?(我尝试使用unittest而不是unittest2,但没有区别.)

Mik*_*kin 7

关键是缓冲区选项影响测试中的stdout写入,忽略了unittest2行为的写入.也就是说,如果你添加字符串,你会发现差异

print "Suppress me!"
Run Code Online (Sandbox Code Playgroud)

对于任何测试方法,如果您选择,此表达式将出现在stdout上buffer=False,而如果将其设置为True则将被抑制.