当遇到“sys.exit()”时,似乎python nosetest将退出,并且这个内置的模拟不起作用。谢谢你的建议。
答案 0 :(得分:26)
您可以尝试捕获SystemExit例外。当有人拨打sys.exit()
时会引发此问题。
with self.assertRaises(SystemExit):
myFunctionThatSometimesCallsSysExit()
答案 1 :(得分:7)
import sys
sys.exit = lambda *x: None
请记住,程序可能会合理地期望在sys.exit()
之后不再继续,因此修补它可能实际上没有帮助......
答案 2 :(得分:6)
如果您使用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
答案 3 :(得分:2)
这是unittest
框架中的一个示例。
with self.assertRaises(SystemExit) as cm:
my_function_that_uses_sys_exit()
self.assertEqual(cm.exception.code, expected_return_code)