¿Cómo capturo sys.exit() con pytest en una función que devuelve un generador? En el siguiente código, f() solo devuelve hola mundo si x = True. Pero al usar x = False, espero que el código inicie SystemExit.

def test_generator():
    with pytest.raises (SystemExit) as excinfo:
        def f(x = True):
            if x:
                yield 'hello world'
            sys.exit('Test')
        f (x = False)
    assert 'Test' == excinfo.value

Py.test se queja de que no se planteó la excepción. Si cambio yield por return, el código funciona sin ningún problema. ¿Algunas ideas?

0
Guilherme 12 ene. 2017 a las 23:44
¿Ha intentado parchear sys con mock.patch?
 – 
Rafael Aguilar
12 ene. 2017 a las 23:51

1 respuesta

La mejor respuesta

El simple hecho de llamar a una función de generador no ejecuta NINGÚN código dentro de ella, eso solo sucede cuando iteras sobre el generador devuelto. Prueba list(f(x=False)), o quizás f(x=False).next().

1
jasonharper 13 ene. 2017 a las 00:03