Примусово повторно перевірити або вимкнути кешування тесту


106

Проблема:

Коли я двічі запускаю один і той же тест, другий запуск взагалі не виконується. Результати - кешовані з першого запуску.

PASS    
ok      tester/apitests    (cached)

Посилання

Я вже перевірив https://golang.org/cmd/go/#hdr-Testing_flags, але для цього немає прапора cli.

Питання:

Чи є можливість примусити go test завжди запускати тест, а не кешувати результати тесту.

Відповіді:


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Функція for і наявність модулів go при використанні GOCACHE=offвидає помилку go: cannot use modules with build cache disabled. Краще використовувати запропонований -count 1.
zdebra

1
Ви маєте рацію, згідно github.com/golang/go/issues/26809#issuecomment-410477084 GOCACHE буде повільно припинятися в go 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.