Отладка тестов Go¶
Остановиться внутри теста на Go.
Предпосылки¶
dlvвPATH—command -v dlv- модуль Go
Короткий путь: тест под курсором¶
или
Bugsaur выполняет тестовый запуск через dlv для выбранного пакета или файла.
Адаптер, окружение и рабочий каталог приходят из профиля.
Буфер должен быть сохранён, а сохранённые точки останова не подхватываются: запуск теста использует только точки текущего запроса.
Длинный путь: профиль тестов пакета¶
Годится, когда вы регулярно отлаживаете весь набор тестов пакета.
[profiles.orders-test]
adapter = "dlv"
program = "internal/orders"
# `go test` запускает бинарник из каталога пакета — без этой строки
# `testdata/` не найдётся, потому что по умолчанию cwd — корень проекта.
cwd = "internal/orders"
[profiles.orders-test.launch_arguments]
mode = "test"
mode = \"test\" отключает сборку со стороны Bugsaur
Обычно Go компилирует сам Bugsaur и отдаёт Delve готовый бинарник. Когда
профиль называет mode в launch_arguments, значит запуск ведут руками:
Delve собирает тестовый бинарник сам, и наша сборка подложила бы ему не тот
файл.
Запустить один тест из профиля¶
Передайте стандартный фильтр go test:
[profiles.orders-test.launch_arguments]
mode = "test"
args = ["-test.run", "TestCreateOrder$", "-test.v"]
Символ $ закрепляет конец шаблона; без него TestCreateOrder совпадёт и с
TestCreateOrderFails.
Если не работает¶
| Симптом | Что делать |
|---|---|
Не находится testdata/ |
задайте cwd каталогом пакета |
| Запускается весь набор, а не один тест | добавьте -test.run с закреплённым шаблоном |
| Сессия падает с выводом компилятора | тесты не компилируются; текст в панели Logs |
| Сессия не стартует | dlv не виден через PATH — Адаптер не запускается |
| Точки останова на странных строках | в своей сборке не отключена оптимизация — оставьте -gcflags=all=-N -l |
| Тысячи потоков | это горутины — Потоки |