Подтвердить что ты не робот

Подавить вывод на печать в юнит-тестах

Изменить: пожалуйста, обратите внимание, что я использую 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?

Редактировать Этот вопрос не является дубликатом помеченного вопроса, который задает вопрос о выводе из строя определенной функции в обычном скрипте Python.

Принимая во внимание, что этот вопрос задает вопрос о сокрытии обычного стандартного вывода скрипта Python во время его юнит-тестов. Я все еще хочу, чтобы стандартный вывод unittest отображался, и я не хочу отключать стандартный вывод моего протестированного сценария.

4b9b3361

Ответ 1

Позвоните в свой unittest с опцией "-b" - 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

Альтернатива: используйте 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