问题
It seems that python nosetest will quit when encountered "sys.exit()", and mocking of this built-in doesn't work. Thanks for suggestions.
回答1:
You can try catching the SystemExit exception. It is raised when someone calls sys.exit()
.
with self.assertRaises(SystemExit):
myFunctionThatSometimesCallsSysExit()
回答2:
import sys
sys.exit = lambda *x: None
Keep in mind that programs may reasonably expect not to continue after sys.exit()
, so patching it out might not actually help...
回答3:
If you're using mock
to patch sys.exit
, you may be patching it incorrectly.
This small test works fine for me:
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
invoked with:
nosetests foo.py
outputs:
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
回答4:
This is an example in the unittest
framework.
with self.assertRaises(SystemExit) as cm:
my_function_that_uses_sys_exit()
self.assertEqual(cm.exception.code, expected_return_code)
来源:https://stackoverflow.com/questions/8332090/how-to-get-around-sys-exit-in-python-nosetest