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

Hai*_*ang 13 python mocking nose

看来,蟒蛇nosetest会遇到当"sys.exit()"退出,而这个内置的嘲讽不工作.谢谢你的建议.

kic*_*hik 28

您可以尝试捕获SystemExit异常.当有人打电话时,它会被提出sys.exit().

with self.assertRaises(SystemExit):
  myFunctionThatSometimesCallsSysExit()
Run Code Online (Sandbox Code Playgroud)

  • with self.assertRaises(SystemExit):myFunction() (2认同)

kin*_*all 7

import sys
sys.exit = lambda *x: None
Run Code Online (Sandbox Code Playgroud)

请记住,程序可能合理地期望不会继续sys.exit(),所以修补它可能实际上没有帮助......


Ada*_*ner 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
Run Code Online (Sandbox Code Playgroud)

调用:

nosetests foo.py
Run Code Online (Sandbox Code Playgroud)

输出:

.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK
Run Code Online (Sandbox Code Playgroud)

  • 问题在于,虽然将调用模拟,但它不会停止执行,退出后的任何指令都将被调用。IE 如果您由于错误状态而退出,测试将继续尝试运行可能损坏的代码。 (4认同)

Tar*_*sch 5

这是unittest框架中的一个例子。

with self.assertRaises(SystemExit) as cm:
    my_function_that_uses_sys_exit()
self.assertEqual(cm.exception.code, expected_return_code)
Run Code Online (Sandbox Code Playgroud)