unittest.main() приводит к сбою интерпретатора Python в Spyder

У меня есть скрипт Python, содержащий unittest.TestCase, с функцией setUp() и небольшим количеством функций типа test_foo_does_bar().

Скрипт заканчивается так:

if __name__ == '__main__':
    unittest.main()

Когда я запускаю этот скрипт в Spyder (детали конфигурации см. ниже), интерпретатор останавливается на следующей строке:

----------------------------------------------------------------------
Ran x tests in x.xxxs

FAILED (failures=x)

Никакое количество Ctrl+C или Ctrl+D не может спасти интерпретатор и вернуть меня к подсказке. Тот же сценарий, запущенный из командной строки, завершается как обычно.

Это ошибка в Spyder или я что-то упустил?

Информация об установке: Spyder 2.2.3 Python 2.7.5 64-разрядная версия. Qt 4.8.4, PyQt4 (API v2) 4.9.6 в Windows


person LondonRob    schedule 02.04.2014    source источник


Ответы (1)


Он не приводит к сбою интерпретатора Python, он завершает его работу. Это нормальное поведение скрипта.
Сами видите: в main.py указано, main = TestProgram; это означает, что unittest.main() вызовет класс TestProgram, который в своем __init__(self) вызывает self.runTests(), что заканчивается следующим образом:

if self.exit:
    sys.exit(not self.result.wasSuccessful())

Таким образом, у него есть специальный вызов sys.exit(), который завершает работу интерпретатора.

На самом деле, если вы запустите его как командную строку, вы вернетесь в командную строку; и если вы запустите командную строку Python, импортируете модуль и вызовете функцию, вы увидите, что вернетесь в командную строку — вы не останетесь в Python.

Если вы хотите, чтобы скрипт НЕ завершал работу интерпретатора, просто укажите это при вызове функции:

unittest.main(exit=False)
person Roberto    schedule 02.04.2014