Кажется, что nosetest python прекратит свое существование, когда столкнутся с "sys.exit()", и насмехается над этим встроенным модулем. Благодарим за предложения.
Как обойти "sys.exit()" в nosetest python?
Ответ 1
Вы можете попытаться поймать исключение SystemExit. Он возникает, когда кто-то вызывает sys.exit()
.
with self.assertRaises(SystemExit):
myFunctionThatSometimesCallsSysExit()
Ответ 2
import sys
sys.exit = lambda *x: None
Имейте в виду, что программы могут разумно ожидать продолжения после sys.exit()
, поэтому исправление его может не помочь...
Ответ 3
Если вы используете mock
для исправления sys.exit
, вы можете исправить его неправильно.
Этот небольшой тест отлично работает для меня:
import sys
from mock import patch
def myfunction():
sys.exit(1)
def test_myfunction():
with patch('foo.sys.exit') as exit_mock:
myfunction()
assert exit_mock.called
вызывается с помощью:
nosetests foo.py
выходы:
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Ответ 4
Это пример в инфраструктуре unittest
.
with self.assertRaises(SystemExit) as cm:
my_function_that_uses_sys_exit()
self.assertEqual(cm.exception.code, expected_return_code)