2011-02-09 13 views
68

Nosetests --pdb Déjenme detenerme por error o falla, pero esto es demasiado tarde para mis necesidades. Recorrer el código durante la ejecución me ayuda a depurar dónde está el problema.estableciendo puntos de corte con nosetests --pdb option

Sin embargo, los nosetests son útiles ya que permiten pruebas que dependen de importaciones relativas (es decir, pruebas en un paquete).

¿Cómo puedo establecer puntos de interrupción antes de ejecutar las pruebas? Actualmente estoy usando:

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

Esta solución no es adecuada. Las pruebas de nariz interfieren con la salida de pdb y los controles de mi teclado (por ejemplo, las teclas de flecha) están rotos.

Uso de importación pdb; pdb.set_trace() parece una buena idea, sin embargo nosetests está bloqueando mi acceso a la consola pdb.

Respuesta

92

Puede añadir

import pdb; pdb.set_trace() 

cualquier lugar de la fuente que desea detener en el depurador.

Asegúrese de pasar -s a la nariz para que no capture stdout.

+0

que estaba a punto de añadir esto a mi pregunta. Esta tampoco es una solución aceptable. Cuando se usa esto con nosetests, es aparente que esto es literalmente inutilizable ya que el acceso a la consola pdb se filtra, y no se pueden ejecutar comandos pdb. – Devin

+14

Agregue el indicador -s a las pruebas de nariz para evitar que capture la salida estándar, y podrá usar pdb muy bien. –

+1

Esto no es útil para los puntos de interrupción. – SkyLeach

118

Incluso mejor que recordar usar -s es usar la variante set_trace que viene con la nariz. Agregue

from nose.tools import set_trace; set_trace() 

donde desee acceder al depurador. La redirección stdin/out se ocupará de usted. El único efecto secundario extraño con el que me he encontrado es la incapacidad de reiniciar el código desde pdb (usando run) mientras se depura durante una ejecución de nariz.

+0

@Devin ¿hay alguna posibilidad de que esto resuelva su problema? –

+6

Esto funcionó por completo para mí. :) Gracias Matt! – bitcycle

+0

¿Hay documentación de esto? ¿Cómo salir del lazo? – Clayton

1

Si tiene ipython, para un número ilimitado uso genialidad:

import ipdb; ipdb.set_trace() 
Cuestiones relacionadas