在unittest文档[http://docs.python.org/2/library/unittest.html#unittest.main]中,我看到下面描述的方法签名:
unittest.main([module[, defaultTest[, argv[, testRunner[, testLoader[, exit[, verbosity[, failfast[, catchbreak[, buffer]]]]]]]]]])
最后一个选项是“buffer”。文档解释了关于此选项的以下内容:
The failfast, catchbreak and buffer parameters have the same effect as the same-name command-line options.
命令行选项[http://docs.python.org/2/library/unittest.html#command-line-options]的文档对“buffer”的解释如下:
-b, --buffer
The standard output and standard error streams are buffered during the test run. Output during a passing test is discarded. Output is echoed normally on test fail or error and is added to the failure messages.
我有以下演示代码,它没有显示预期的行为:
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
只是缓冲测试代码的输出。这意味着您只能从unittest2
本身获得输出。它工作得很好。(在您的例子中,它的工作也很简单,您的代码不会打印出任何内容,因此缓冲区与缓冲区之间没有任何内容,这就是为什么没有它,您会得到相同的结果。)如果您也不想从
unittest2
获得任何输出,则可以始终使用重定向到/dev/null
的shell命令行运行该脚本,或者从重定向到sys.stdout
的脚本导入unittest2
。但通常你真的想读那个标准输出,而不仅仅是丢弃它。即使你不想把它记录在任何地方,你也要检查最后一行是否是
"OK"
,这样你就可以向你的编程团队发送电击,或者在失败时执行任何操作。否则,通过cron
运行测试有什么意义?关键是buffer option会影响在测试中编写stdout,而忽略unittest2行为的影响。也就是说,如果您添加字符串
对于任何测试方法,如果选择
buffer=False
,则此表达式将出现在stdout上,而如果将其设置为True,则它将被抑制。相关问题 更多 >
编程相关推荐