2011-11-30 10 views

Respuesta

22

Puede intentar capturar la excepción SystemExit. Se levanta cuando alguien llama al sys.exit().

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

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

+0

Brilliant! Eso es realmente útil cuando se trabaja con scripts de otras personas y se organizan utilidades de automatización :) – theMarceloR

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

Tenga en cuenta que los programas pueden esperar razonablemente no continuar después sys.exit(), por lo que parchear a cabo no en realidad podría ayudar a ...

+0

No necesariamente. Yo uso sys.exit() para demonizar mi servidor. –

5

Si está utilizando mock parchear sys.exit, se puede estar parchándolo incorrectamente.

Esta pequeña prueba funciona bien para mí:

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 

invoca con:

nosetests foo.py 

salidas:

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

OK 
1

Este es un ejemplo en el marco unittest.

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