PyUnit avec des processus enfants
-
28-10-2019 - |
Question
Dans certains codes Python, je génère un code codique et j'effectue un traitement dans un processus enfant pendant que le parent attend qu'il se termine.Il ne génère pas de code-code après le code-code générique.
J'ai un problème pour tester ce code dans PyUnit, car lorsque le processus enfant se termine explicitement avec fork
, il crée une erreur PyUnit.
Ce code ci-dessous produit le problème
class TestClass(TestCase):
def test(self):
pid = os.fork()
if pid == 0:
sys.exit(0)
else:
os.waitpid(pid,0)
C'est l'erreur
Traceback (most recent call last):
File "test.py", line 15, in test
sys.exit(0)
SystemExit: 0
----------------------------------------------------------------------
Ran 1 test in 0.007s
FAILED (errors=1)
Y a-t-il un moyen d'éviter que PyUnit échoue au test si un processus enfant se ferme explicitement?
La solution
Tout ce que sys.exit fait est de lancer une exception SystemExit, qui bouillonne normalement.Cependant os._exit (0) se fermera immédiatement et ne donnera à aucun code de nettoyage une chance de s'exécuter.Cela empêche PyUnit de faire quoi que ce soit, y compris l'échec du test.Ainsi, dans votre code de test, vous pouvez intercepter SystemExit et appeler os._exit à la place.
Si le processus enfant s'attend à ce qu'un nettoyage explicite se produise à la sortie, vous devrez vous organiser pour le faire dans votre cas de test.