2011-11-30 70 views

回答

22

您可以嘗試捕獲SystemExit異常。當有人打電話給sys.exit()時,會引發這個問題。

with self.assertRaises(SystemExit): 
    myFunctionThatSometimesCallsSysExit() 
+2

與self.assertRaises(SystemExit): myFunction的() –

+0

輝煌!當你使用其他人的腳本和編排自動化工具時,這真的很有用:) – theMarceloR

7
import sys 
sys.exit = lambda *x: None 

請記住,程序可能相當不希望sys.exit()後繼續,所以修補它可能沒有實際的幫助......

+0

不一定。我使用sys.exit()來守護我的服務器。 –

5

如果您使用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 
1

這是unittest框架的例子。

with self.assertRaises(SystemExit) as cm: 
    my_function_that_uses_sys_exit() 
self.assertEqual(cm.exception.code, expected_return_code)