Принудительное повторное тестирование или отключение кеширования тестов

106

Проблема:

Когда я запускаю один и тот же тест дважды, второй запуск вообще не выполняется. Результаты - кэшированные с первого запуска.

PASS    
ok      tester/apitests    (cached)

Ссылки

Я уже проверял https://golang.org/cmd/go/#hdr-Testing_flags, но для этой цели нет флага cli.

Вопрос:

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

Саймон Фрей
источник

Ответы:

161

Есть несколько вариантов, описанных в документации по флагам тестирования :

  • go clean -testcache: истекает срок действия всех результатов теста
  • используйте не кэшируемые флаги при выполнении теста. Идиоматический способ - использовать-count=1

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

Марк
источник
4
Это по-прежнему полезно в случае, если вы тестируете движущуюся зависимость, например, базу данных, в которой вы настраиваете / удаляете зависимость, но не свой код. Похоже, OP тестировал API без заглушек, что и вызвало их вопрос.
joakim
можно ли очистить кеш только для определенных тестов?
nickcamillo
3
Обратите внимание, что это go clean -testcache ./...тоже работает (вверху монорепозитория)
voutasaurus
Я открыл вопрос, чтобы сделать это лучше: github.com/golang/go/issues/39056?ts=4
wesm
23

В Go11 я не мог отключить использование кеша GOCACHEс модулями, -count=1вместо этого я использовал :

go test -count=1

До Go11:

GOCACHE=off go test

Или очистите кеш теста и снова запустите тест:

go clean -testcache && go test 
Мухаммад Солиман
источник
19

Там же GOCACHE=offупоминается здесь .

солтыш
источник
5
Для использования go 1.11и наличия функции модулей go GOCACHE=offвыдает ошибку go: cannot use modules with build cache disabled. Лучше использовать предлагаемые -count 1.
zdebra
1
Вы правы, согласно github.com/golang/go/issues/26809#issuecomment-410477084 GOCACHE будет постепенно сокращаться в версии 1.12, поэтому использование сейчас go test -count=1 ...является более безопасным выбором.
солтыш
build cache is disabled by GOCACHE=off, but required as of Go 1.12
Франческо Казула,
7

Как я это исправил (я использую Visual Studio Code на macOS):

Код> Настройки> Настройки

Щелкните ...в правой части страницы настроек.

Нажмите Open settings.json

Либо:

  1. Добавьте следующий фрагмент в свой файл settings.json

    "go.testEnvVars": {
        "GOCACHE": "off"
    }
    
  2. Измените значение, go.testEnvVarsчтобы включить следующее:"GOCACHE": "off"
искаженный сигнал
источник
4
Кеш сборки требуется начиная с Go 1.12, поэтому настройка GOCACHEне будет работать с последними версиями Go. Решение для VS Code - установить "go.testFlags": ["-count=1"]в настройках.
Armand Grillet