如何绕过python nosetest中的“sys.exit()”?

时间:2011-11-30 19:54:14

标签: python mocking nose

当遇到“sys.exit()”时,似乎python nosetest将退出,并且这个内置的模拟不起作用。谢谢你的建议。

4 个答案:

答案 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)