Как обойти " sys.exit () " в python nosetest?
кажется, что python nosetest завершит работу при обнаружении " sys.exit ()", и издевательство над этим встроенным не работает. Спасибо за предложения.
4 ответов
вы можете попробовать поймать SystemExit исключения. Он поднимается, когда кто-то зовет sys.exit().
with self.assertRaises(SystemExit):
myFunctionThatSometimesCallsSysExit()
import sys
sys.exit = lambda *x: None
имейте в виду, что программы могут рассчитывать не продолжать после sys.exit(), поэтому исправление этого может не помочь...
если вы используете 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
Это пример unittest основы.
with self.assertRaises(SystemExit) as cm:
my_function_that_uses_sys_exit()
self.assertEqual(cm.exception.code, expected_return_code)