Как обойти " 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)