2011-11-30 13 views

risposta

22

È possibile provare ad individuare l'eccezione SystemExit. Viene generato quando qualcuno chiama sys.exit().

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

con self.assertRaises (SystemExit): myFunction() –

+0

Brilliant! È molto utile quando lavori con script di altre persone e orchestra le utility di automazione :) – theMarceloR

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

Tenete a mente che i programmi possono ragionevolmente aspettarsi di non continuare dopo sys.exit(), quindi l'applicazione di patch fuori non potrebbe effettivamente aiutare ...

+0

Non necessariamente. Io uso sys.exit() per demonizzare il mio server. –

5

Se stai usando mock patchare sys.exit, è potrebbe essere corretto in modo errato.

Questo piccolo test funziona bene per me:

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 

invocato con:

nosetests foo.py 

uscite:

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

OK 
1

Questo è un esempio nel quadro unittest.

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