python – 在单元测试中抑制打印输出
作者:互联网
参见英文答案 > Silence the stdout of a function in Python without trashing sys.stdout and restoring each function call 8个
编辑:请注意我正在使用Python 2.6(标记为)
说我有以下内容:
class Foo:
def bar(self):
print 'bar'
return 7
并说我有以下单元测试:
import unittest
class ut_Foo(unittest.TestCase):
def test_bar(self):
obj = Foo()
res = obj.bar()
self.assertEqual(res, 7)
所以,如果我跑:
unittest.main()
我明白了:
bar # <-- I don't want this, but I *do* want the rest
.
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK
Exit code: False
我的问题是:有没有办法抑制被测对象的输出,同时仍然得到unittest框架的输出?
编辑
这个问题不是flagged question的重复,它要求在普通的python脚本中沉默特定函数的stdout.
虽然这个问题是在运行它的单元测试时询问是否隐藏了python脚本的正常标准输出.我仍然希望显示unittest标准输出,我不想禁用我测试过的脚本的标准输出.
解决方法:
使用选项“-b”调用unittest – buffer stdout和stderr
Foo.py
class Foo:
def bar(self):
print "bar"
return 7
test.py
import unittest
from Foo import Foo
class test_Foo(unittest.TestCase):
def test_bar(self):
obj = Foo()
res = obj.bar()
self.assertEqual(res, 7)
if __name__ == "__main__":
unittest.main()
使用-b选项运行它
$python test.py -b
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
替代方案:使用鼻子
$pip install nose
什么安装命令nosetests
请注意,我已经修改了测试套件,使其类和方法以test为前缀,以满足鼻子默认测试发现规则.
默认情况下,nosetests不显示输出
$nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK
如果要查看输出,请使用-s开关:
$nosetests -s
bar
.
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK
标签:python-unittest,python-2-6,python 来源: https://codeday.me/bug/20191002/1843209.html