Estoy usando py.test para pruebas unitarias de mi programa python. Deseo depurar mi código de prueba con el depurador de python de la manera normal (me refiero a pdb.set_trace() en el código) pero no puedo hacerlo funcionar.¿Puedo depurar con depurador de python cuando se utiliza py.test de alguna manera?
Poner pdb.set_trace() en el código no funciona (IOError plantea: la lectura de la entrada estándar mientras que la producción es capturado). También intenté ejecutar py.test con la opción --pdb, pero eso no parece ser el truco si quiero explorar lo que sucede antes de mi afirmación. Se rompe cuando una afirmación falla, y pasar de esa línea significa terminar el programa.
¿Alguien sabe una manera de conseguir la depuración, o es la depuración y py.test no destinados a estar juntos?
Pedro, gracias por sus sugerencias. La alternativa python -m pdb me guía por el script pero no llama a las funciones, por lo que aunque es útil para mi desarrollo de Python, no veo cómo puedo hacer que funcione. Mencioné la opción --pdb, pero a menos que alguien pueda pensar cómo usarla, tampoco puedo ir más allá. – Joel
Sugiero leer el manual en pdb y aprender las teclas. pdb imprimirá la función que se ejecutará a continuación. Si escribe "s", ingresará a esa función. Si escribe "n", que es el valor predeterminado, simplemente vaya a la siguiente línea de código.Es muy probable que esté presionando "n" en lugar de "s" cuando quiera ingresar a su rutina "principal". –
No es así como funciona py.test. Código de prueba pequeño pero válido para py.test: def test_arithmetic: assert 2 + 2 == 4 Eso es suficiente para tener una prueba unitaria. Sin rutina "principal", solo una función que comienza con "prueba_". Si ejecuta esto con python normal, simplemente definiría test_arithmetic, no lo ejecutará. Pero py.test encuentra funciones que comienzan con test_ y las ejecuta para mí, ocupándose de afirmaciones fallidas, etc. – Joel