Выполнение модульных тестов с пользовательскими флагами
В Visual Studio Code (VS Code) вы можете столкнуться с проблемами при запуске и отладке модульных тестов, когда вы необходимо предоставить определенные флаги. Давайте углубимся в проблему и предоставим комплексное решение.
Обзор проблемы
При запуске модульных тестов из VS Code пользователям может потребоваться указать специальные флаги, например - ldflags в приведенном примере. Однако они столкнулись с трудностями при интеграции этих флагов в программу запуска тестов VS Code.
Рабочие конфигурации
В ходе экспериментов было обнаружено, что для обеспечить функциональность как запуска теста, так и отладки:
Запуск теста:
"go.testFlags": [
"-ldflags",
"-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn"
]
Отладочный тест:
"go.testFlags": [
"-ldflags",
"'-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn'"
]
Основная проблема
Причина различных конфигураций заключается в том, как VS Code генерирует тестовую команду. При отладке VS Code добавляет к команде дополнительные параметры, которые влияют на интерпретацию флагов. Таким образом, одинарные кавычки в конфигурации отладки необходимы для обеспечения правильной передачи флагов.
Возможное решение
Альтернативный метод, предлагаемый для отладки сложных тестов: для компиляции тестового двоичного файла и запуска сеанса отладки dlv. Это позволяет более точно контролировать выполнение тестов и отладку.
Использование dlv для отладки
Следующие шаги описывают, как использовать dlv для отладки модульных тестов:
Скомпилируйте тестовый двоичный файл с необходимыми флагами, например:
go test -c -ldflags "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn" -gcflags="all=-N -l"
Начать сеанс безголового dlv:
dlv exec ./foo.test --headless --listen=:2345 --log --api-version=2 -- -count=1 -- $(pwd)/some/path
В VS Code откройте конфигурацию запуска файл (Отладка: открыть файл launch.json). Создайте конфигурацию, подобную следующей:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Test",
"type": "go",
"request": "attach",
"mode": "remote",
"port": 2345,
"host": "127.0.0.1",
"showLog":true,
"trace":"log"
}
]
}
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3