web-dev-qa-db-fra.com

définition de points d'arrêt avec nosetests, option --pdb

nosetests --pdb arrêtons-moi en cas d'erreur ou d'échec, mais c'est trop tard pour mes besoins. Parcourir le code pendant l'exécution m'aide à déboguer où se trouve le problème.

Cependant, les tests noset sont utiles car ils permettent des tests qui reposent sur des importations relatives (c'est-à-dire des tests dans un package).

Comment définir des points d'arrêt avant l'exécution des tests? Actuellement j'utilise:

python -m pdb /path/to/my/nosetests testfile.py

Cette solution n'est pas adéquate. Nosetests interfèrent avec la sortie pdb et mes commandes de clavier (par exemple les touches fléchées) sont cassées.

Utiliser import pdb; pdb.set_trace () semble être une bonne idée, mais nosetests bloque mon accès à la console pdb.

81
Devin

Vous pouvez ajouter

import pdb; pdb.set_trace() 

n'importe où dans votre source que vous souhaitez arrêter dans le débogueur.

Assurez-vous de réussir -s au nez pour qu'il ne capture pas stdout.

111
Ned Batchelder

Encore mieux que de penser à utiliser -s consiste à utiliser le set_trace variante fournie avec Nose. Ajouter

from nose.tools import set_trace; set_trace()

partout où vous souhaitez pénétrer dans le débogueur. La redirection stdin/out sera prise en charge pour vous. Le seul effet secondaire étrange que j'ai rencontré est l'impossibilité de redémarrer votre code à partir de pdb (en utilisant run) lors du débogage lors d'une exécution de nez.

132
Matt Luongo

Si vous avez ipython, pour une impression illimitée, utilisez:

import ipdb; ipdb.set_trace() 

* génialité illimitée: tout comme ipython - auto-complétion, coloration, etc.

5
Shubham Chaudhary

Si vous utilisez pytest , vous pouvez utiliser

import pytest; pytest.set_trace()

Voir documentation .

0
gerrit