Отключить печать в тесте Python - PullRequest
6 голосов
/ 15 декабря 2011

Я использую unittest, и после каждого теста он выводит «.», «E» или «F» для «ok», «error» и «fail». Как мне его выключить? Я использую Python 2.7, и эти печати происходят из встроенного класса runner. Это звучит очень сложно переопределить классы, потому что все это вложено.

редактирование: Я только хочу снять символы E. и F, потому что они не появляются одновременно с другими журналами в моих тестах.

Ответы [ 3 ]

10 голосов
/ 15 декабря 2011

Вывод unittest записывается в стандартный поток ошибок, который вы можете передать куда-то еще. На * nix box это было бы возможно так:

python -m unittest some_module 2> /dev/null

На окнах это должно выглядеть так (спасибо Карлу Кнехтелю):

python -m unittest some_module 2> NUL

Если вы запускаете тесты из python, вы можете просто заменить поток stderr следующим образом:

import sys, os

sys.stderr = open(os.devnull, 'w')

... # do your testing here

sys.stderr = sys.__stderr__ # if you still need the stderr stream

Поскольку вы просто хотите отключить обновления для символов., F, E, вы также можете создать свой собственный класс TestResult, переопределив класс по умолчанию. В моем случае (Python 2.6) это будет выглядеть так:

import unittest

class MyTestResult(unittest._TextTestResult):
    def addSuccess(self, test):
        TestResult.addSuccess(self, test)
    def addError(self, test, err):
        TestResult.addError(self, test, err)
    def addFailure(self, test, err):
        TestResult.addFailure(self, test, err)

Это эффективно отключает печать символов, но поддерживает функциональность по умолчанию.

Теперь нам также нужен новый класс TestRunner и переопределение метода _makeResult:

class MyTestRunner(unittest.TextTestRunner):
    def _makeResult(self):
        return MyTestResult(self.stream, self.descriptions, self.verbosity)

С этим бегуном вы можете теперь наслаждаться тестированием без регистрации.

Просто примечание: это невозможно из командной строки, к сожалению.

6 голосов
/ 18 июня 2013

Немного поздний ответ, но кто-то может найти его полезным.Вы можете включить.Выключите E и F, установив уровень детализации в 0:

testRunner = unittest.TextTestRunner( verbosity = 0 )

В конце теста в stderr вы все равно получите окончательный результат и возможные ошибки / исключения.2,4 и 2,7.

1 голос
/ 15 декабря 2011

В зависимости от используемой вами структуры юнит-теста (стандарт, нос ...), у вас есть несколько способов уменьшить детализацию:

python -m unittest -h
...
-q, --quiet      Minimal output
...
...