Unittest simple ci-dessous.Pourquoi ce test échoue-t-il lorsque pdb.set_trace() est appelé?
Si je l'exécute (par exemple, python -m unittest nom_module) sans 'test' comme argument, cela passe. Si je l'exécute avec 'test' comme argument, j'obtiens "TypeError: type d'argument incorrect pour l'opération intégrée". Pourquoi?
from io import StringIO
import sys
from unittest import TestCase
class TestSimple(TestCase):
def test_simple(self):
old_stdout = sys.stdout
buf = StringIO()
try:
sys.stdout = buf
print('hi')
finally:
import pdb
if 'test' in sys.argv:
pdb.set_trace()
sys.stdout = old_stdout
version contextlib.redirect_stdout:
from contextlib import redirect_stdout
from io import StringIO
import pdb
import sys
from unittest import TestCase
class TestSimple(TestCase):
def test_simple(self):
buf = StringIO()
with redirect_stdout(buf):
print('hi')
pdb.set_trace()
print('finis')
Merci à l'avance.
Edit: Le programme original a été testé en Python 3.4 dans Debian et Windows 7.
Quelque chose de similaire (en utilisant des drapeaux de l'environnement au lieu d'un argument de ligne de commande) semble se bloquer en Python 2, mais en appuyant sur c lui permet de terminer, donc je suppose qu'il pourrait juste être que l'interface utilisateur de pdb a été redirigé.Mais la version Python 3 a le comportement décrit initialement (plantage), même si un collègue testé sur 3.4 sur Mac OS et vu le "hang" "comportement.
On dirait que 'pdb' a un problème avec stdout ne pas être "normal" quand vous l'appelez. Si vous déplacez la ligne qui remplace stdout standard au-dessus de 'set_trace' cela fonctionne très bien. Même si vous utilisez 'contextlib.redirect_stdout' au lieu de l'assigner manuellement, ce qui est probablement ce que vous devriez faire en premier lieu .. – tzaman
J'ai effectivement eu l'erreur à l'origine en utilisant contextlib.redirect_stdout - remplacé juste pour essayer de faire le émettre plus clair. Je vais l'ajouter à la description ci-dessus. – AdamC
Malheureusement, j'avais besoin de pdb ** dans ** l'instruction with. – AdamC