установка точек останова с помощью тестов носа --pdb - PullRequest
79 голосов
/ 10 февраля 2011

nosetests --pdb давайте остановимся на ошибке или неудаче, но это слишком поздно для моих нужд. Прохождение кода во время выполнения помогает мне отладить, где проблема.

Тем не менее, тесты носа полезны, поскольку они допускают тесты, основанные на относительном импорте (то есть тесты в пакете).

Как я могу установить контрольные точки перед выполнением тестов? В настоящее время я использую:

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

Это решение не подходит. Nosetests мешает выводу pdb, и мои элементы управления клавиатуры (например, клавиши со стрелками) не работают.

Использование import pdb; pdb.set_trace () может показаться хорошей идеей, однако тестирование носа блокирует мой доступ к консоли pdb.

Ответы [ 4 ]

131 голосов
/ 21 сентября 2011

Даже лучше, чем вспомнить -s, - использовать вариант set_trace, который поставляется с Nose. Добавить

from nose.tools import set_trace; set_trace()

везде, где вы хотите взломать отладчик. Перенаправление stdin / out позаботится о вас. Единственный странный побочный эффект, с которым я столкнулся, - это невозможность перезапустить ваш код из pdb (используя run) во время отладки во время запуска носа.

110 голосов
/ 10 февраля 2011

Вы можете добавить

import pdb; pdb.set_trace() 

в любом месте вашего источника, который вы хотите остановить в отладчике.

Убедитесь, что вы передаете -s носу, чтобы он не захватывал stdout.

5 голосов
/ 22 августа 2016

Если у вас ipython , для неограниченного использования используйте:

import ipdb; ipdb.set_trace() 

* Неограниченная удивительность: как в ipython - автозаполнение, раскраска и т. Д.

0 голосов
/ 21 июня 2019

Если вы используете pytest , вы можете использовать

import pytest; pytest.set_trace()

См. документацию .

...