#python #debugging #visual-studio-code #pytest
Вопрос:
У меня есть библиотека python (модуль), которая содержит несколько модулей и связанных с ними тестов, следующих довольно стандартной структуре
project_root
library_folder
__init__.py
module_A
__init__.py
sub_module_AA
__init__.py
file_AAA.py
file_AA.py
file_AB.py
file_AC.py
module_B
__init__.py
file_BA.py
file_BB.py
module_C
__init__.py
file_CA.py
file_CB.py
file_CC.py
...
tests
module_A
test_fileAA.py
...
module_B
test_fileBA.py
...
pyproject.toml
...
В настоящее время я выполняю то, что я бы назвал отладкой пещерного человека, помещая a import pdb; pdb.set_trace()
в файл с ошибками, а затем вызываю соответствующий тест pytest path/to/test_fileXY.py
и жду точки останова. Я хотел бы перенести эту настройку в VSCode, чтобы я мог просто нажать F5
и запустить соответствующие тесты.
Моя проблема в том, что мне нужно позвонить pytest {workspaceDir}/tests/{submodule_path}/test_{filename}.py
, чтобы запустить тесты. Я могу подобраться довольно близко через
{
"configurations": [
{
"name": "Python: Run Current File's Tests",
"type": "python",
"request": "launch",
"module": "pytest",
"console": "integratedTerminal",
"args": [
"${workspaceFolder}/tests/${relativeFileDirname}/test_${fileBasename}"
]
}
]
}
Однако это приводит {workspaceDir}/tests/library_folder/{submodule_path}/test_{filename}.py
к (обратите внимание на дополнительное library_folder
в пути. Как это сделать правильно, т. Е. Как создать ссылку на соответствующий тест активного файла?
Ответ №1:
Комментарии:
1. Я знаю об этой функции, и она также довольно близка, но не работает для меня. Этот вариант
Python: Debug All Tests
не работает для меня, потому что мой набор тестов слишком велик, что делает отладку нежелательно медленной. Запуск отдельных тестов с помощью CodeLense работает, но расположение над тестами означает, что мне нужно искать их и каждый раз переключать вкладки. В настоящее время я пытаюсь сделать это через боковое меню, но есть настройка, в которой я могу внести небольшое изменение и нажать «я выстрелил себе в ногу? (выполнить локальные тесты)» кнопка кажется гораздо более элегантной.