编辑:请注意我正在使用Python2.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我的问题是:是否有一种方法可以在获得单元测试框架输出的同时抑制被测试对象的输出?
编辑这个问题并不是flagged question的重复,flagged question询问的是如何在普通python脚本中沉默特定函数的标准输出。
虽然这个问题是在运行python脚本时隐藏正常的stdout,但它是单元测试。我仍然希望显示单元测试的标准输出,并且我不想禁用测试脚本的stdout。
发布于 2014-06-10 06:42:22
使用选项"-b“调用您的单元测试-缓冲区标准输出和stderr
Foo.py
class Foo:
def bar(self):
print "bar"
return 7test.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选择:使用nose
$ pip install nose安装命令nosetests
请注意,我修改了测试套件,使其具有以test为前缀的类和方法,以满足nose默认测试发现规则。
默认情况下,nosetests不显示输出
$ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK如果要查看输出,请使用-s开关:
$ nosetests -s
bar
.
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK发布于 2020-08-28 10:05:38
您可以通过禁用sys.stdout并在测试完成后启用它来抑制输出:
import sys
import io
import unittest
class ut_Foo(unittest.TestCase):
def test_bar(self):
#You suppress here:
suppress_text = io.StringIO()
sys.stdout = suppress_text
obj = Foo()
res = obj.bar()
self.assertEqual(res, 7)
#You release here:
sys.stdout = sys.__stdout__这一切都是从:
https://codingdose.info/2018/03/22/supress-print-output-in-python/
https://stackoverflow.com/questions/24134343
复制相似问题