如何在Python nosetest中绕过“sys.exit()”?
看起来,当 Python 的 nosetest 遇到 sys.exit()
时,它会直接退出,而对这个内置功能进行模拟(也就是假装它不是真的)似乎没有效果。
5 个回答
7
import sys
sys.exit = lambda *x: None
请记住,程序在调用 sys.exit()
后,通常会认为自己已经结束了,所以如果你试图去修改这个行为,可能并不会真的解决问题...
9
如果你在用 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
41
你可以试着捕捉一下 SystemExit 这个异常。这个异常是在有人调用 sys.exit()
时产生的。
with self.assertRaises(SystemExit):
myFunctionThatSometimesCallsSysExit()