Suppress print output in unittests [duplicate]

时间秒杀一切 提交于 2019-11-28 07:00:53

问题


This question already has an answer here:

  • Silence the stdout of a function in Python without trashing sys.stdout and restoring each function call 8 answers

Edit: Please notice I'm using Python 2.6 (as tagged)

Say I have the following:

class Foo:
    def bar(self):
        print 'bar'
        return 7

And say I have the following unit test:

import unittest
class ut_Foo(unittest.TestCase):
    def test_bar(self):
        obj = Foo()
        res = obj.bar()
        self.assertEqual(res, 7)

So if I run:

unittest.main()

I get:

bar # <-- I don't want this, but I *do* want the rest
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK
Exit code:  False

My question is: Is there a way to suppress the output of the object being tested while still getting the output of the unittest framework?

Edit This question is not a duplicate of the flagged question which is asking about silencing stdout of a particular function within a normal python script.

Whereas this question is asking about hiding the normal stdout of a python script while running it's unittests. I still want the unittest stdout to be displayed, and I don't want to disable the stdout of my tested script.


回答1:


Call your unittest with option "-b" - buffer stdout and 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()

Run it with -b option

$ python test.py -b
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

Alternative: use nose

$ pip install nose

what installs command nosetests

Note, that I have modified test suite to have class and methods prefixed by test to satisfy nose default test discovery rules.

nosetests by default does not show output

$ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK

If you want to see the output, use -s switch:

$ nosetests -s
bar
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK


来源:https://stackoverflow.com/questions/24134343/suppress-print-output-in-unittests

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!