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,但没有区别.)
关键是缓冲区选项影响测试中的stdout写入,忽略了unittest2行为的写入.也就是说,如果你添加字符串,你会发现差异
print "Suppress me!"
Run Code Online (Sandbox Code Playgroud)
对于任何测试方法,如果您选择,此表达式将出现在stdout上buffer=False,而如果将其设置为True则将被抑制.
| 归档时间: |
|
| 查看次数: |
5592 次 |
| 最近记录: |