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.
Call your unittest with option "-b" - buffer stdout and stderr
Foo.pyclass Foo:
    def bar(self):
        print "bar"
        return 7
test.pyimport 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()
$ python test.py -b
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
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
                        You can suppress the output by disabling the sys.stdout and enabling it after your test is done:
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__
Got all of this from:
https://codingdose.info/2018/03/22/supress-print-output-in-python/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With