Estoy usando el framework unittest para automatizar pruebas de integración de código python multiproceso, hardware externo y C integrado. A pesar de mi flagrante abuso de un framework de pruebas unitarias para pruebas de integración, funciona realmente bien. Excepto por un problema: necesito que la prueba falle si se produce una excepción de cualquiera de los hilos engendrados. ¿Es esto posible con el framework unittest?Make Python unittest fail on exception from any thread
Una solución simple pero no viable sería a) a refactorizar el código para evitar el multi-threading o b) probar cada thread por separado. No puedo hacer eso porque el código interactúa asincrónicamente con el hardware externo. También consideré implementar algún tipo de mensaje que pase para reenviar las excepciones al hilo principal de la unidad. Esto requeriría cambios significativos relacionados con las pruebas del código que se está probando, y quiero evitar eso.
La hora de un ejemplo. ¿Puedo modificar el script de prueba a continuación para que falle en la excepción planteada en my_thread sin modificando la clase x.ExceptionRaiser?
import unittest
import x
class Test(unittest.TestCase):
def test_x(self):
my_thread = x.ExceptionRaiser()
# Test case should fail when thread is started and raises
# an exception.
my_thread.start()
my_thread.join()
if __name__ == '__main__':
unittest.main()
No. La excepción que ocurre en el hilo tiene su propio contexto y las excepciones no se propagan al hilo principal.Creo que no puedes evitar pasar un mensaje si realmente quieres hacerlo. Compruebe http://stackoverflow.com/questions/2829329/catch-a-threads-exception-in-the-caller-thread-in-python –