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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.