Лучшие практики для внешних тестов при использовании модулей Go

У меня есть репозиторий Go, и в нем есть несколько тестов (в пакете с суффиксом _test). Эти тесты сравнивают его, среди прочего, с некоторыми сторонними библиотеками. Я не использую эти библиотеки в своем не тестовом коде.

Сейчас я переношу свое репо на модули Go. Мне не нужны эти сторонние библиотеки в моем go.mod, поскольку моей библиотеке они не нужны для нормального использования, и я не хочу без надобности привязывать свой модуль к ним.

Какой рекомендуемый способ сделать это? Мои идеи:

  • построить тег на тестах
  • ориентиры на другое репо
  • модуль в моем модуле

1 ответ

Если кто-то хочет запустить ваш тест (например, чтобы проверить, подходят ли его заявленные результаты для конфигурации его машины), ему необходимо знать, с какими версиями зависимостей эти тесты были изначально запущены. Информация, необходимая для воспроизведения результатов ваших тестов и тестов, находится в вашемgo.mod файл.

Но учтите, что "иметь минимальную версию" - это не то же самое, что "импортировать".

Если пользователь создает ваш пакет, но не создает и не запускает свой тест, или если он создает какой-либо другой пакет в вашем модуле, ему не нужно будет загружать исходный код для зависимости теста, даже если эта зависимость включена в вашgo.mod файл.

(И предложение в https://golang.org/issue/36460 удваивает это свойство: если оно будет реализовано, это предложение позволит избежать загрузки зависимостей пакетов, которые никогда не импортируются, потенциально сокращая большие фрагменты графа зависимостей.)

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

Другие вопросы по тегам