Unittest вызывает sys.exit ()

Независимо от того, что я делаю, sys.exit () вызывается unittest, даже самые тривиальные примеры. Я не могу сказать, запущена ли моя установка или что происходит.

IDLE 1.2.2 ==== No Subprocess ==== >>> import unittest >>> >>> class Test(unittest.TestCase): def testA(self): a = 1 self.assertEqual(a,1) >>> unittest.main() option -n not recognized Usage: idle.pyw [options] [test] [...] Options: -h, --help Show this message -v, --verbose Verbose output -q, --quiet Minimal output Examples: idle.pyw - run default set of tests idle.pyw MyTestSuite - run suite 'MyTestSuite' idle.pyw MyTestCase.testSomething - run MyTestCase.testSomething idle.pyw MyTestCase - run all 'test*' test methods in MyTestCase Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> unittest.main() File "E:\Python25\lib\unittest.py", line 767, in __init__ self.parseArgs(argv) File "E:\Python25\lib\unittest.py", line 796, in parseArgs self.usageExit(msg) File "E:\Python25\lib\unittest.py", line 773, in usageExit sys.exit(2) SystemExit: 2 >>> 

6 Solutions collect form web for “Unittest вызывает sys.exit ()”

Ваш пример также выходит из моей установки. Я могу заставить его выполнить тесты и остаться в Python, изменив

 unittest.main() 

в

 unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test)) 

Более подробную информацию можно найти здесь в Справочнике по библиотеке Python.

В новом выпуске Python 2.7 unittest.main () имеет новый аргумент.

Если для параметра «exit» установлено значение False , sys.exit() не вызывается во время выполнения unittest.main() .

Не пытайтесь запустить unittest.main() из IDLE. Он пытается получить доступ к sys.argv , и он получает аргументы, с которыми начинался IDLE. Либо запускайте свои тесты иначе, как IDLE, или вызовите unittest.main() в своем собственном процессе Python.

Поп открыть исходный код unittest.py . unittest.main() жестко закодирован для вызова sys.exit() после запуска всех тестов. Используйте TextTestRunner для запуска наборов тестов из приглашения.

Приятно быть в состоянии продемонстрировать, что ваши тесты работают, когда вы сначала проверяете модуль unittest, и знаете, что вы не выйдете из оболочки Python. Однако эти решения зависят от версии.

Python 2.6

Я использую Python 2.6 на работе, import unittest2 as unittest (который является модулем unittest предположительно найденным в Python 2.7).

unittest.main(exit=False) не работает в unittest2 для Python 2.6, а решение JoeSkora – и повторяет его:

 unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test)) 

Чтобы разбить это на свои компоненты и аргументы по умолчанию, с правильными семантическими именами для разных составных объектов:

 import sys # sys.stderr is used in below default args test_loader = unittest.TestLoader() loaded_test_suite = test_loader.loadTestsFromTestCase(Test) # Default args: text_test_runner = unittest.TextTestRunner(stream=sys.stderr, descriptions=True, verbosity=1) text_test_runner.run(loaded_test_suite) 

Python 2.7 и 3

В Python 2.7 и выше должно работать следующее.

 unittest.main(exit=False) 
 try: sys.exit() except SystemExit: print('Simple as that, but you should really use a TestRunner instead') 
  • Как я могу патч / mock logging.getlogger ()
  • ValueError: нет такого метода тестирования в <class 'myapp.tests.SessionTestCase'>: runTest
  • Проверка Python с использованием макетной библиотеки для ввода пользователем в цикл
  • Python Смещение функции из импортированного модуля
  • Использование Mock () в Python
  • Python: может ли unittest отображать ожидаемые и фактические значения?
  • Python mock несколько возвращаемых значений
  • py.test - сбой обнаружения теста, когда тесты в разных каталогах называются одинаковыми
  • Настройка пользователя Django для тестирования носа
  • Тест Django FileField с использованием тестовых приборов
  • Как выполнить тестирование с помощью фальшивого файлового объекта в Python?
  • Python - лучший язык программирования в мире.