Wymuś ponowne testowanie lub wyłącz buforowanie testów

115

Problem:

Kiedy wykonuję ten sam test go dwa razy, drugie uruchomienie w ogóle nie jest wykonywane. Wyniki pochodzą z pamięci podręcznej z pierwszego uruchomienia.

PASS    
ok      tester/apitests    (cached)

Spinki do mankietów

Sprawdziłem już https://golang.org/cmd/go/#hdr-Testing_flags, ale nie ma do tego flagi CLI.

Pytanie:

Czy istnieje możliwość wymuszenia przejścia testu, aby zawsze uruchamiał test i nie zapisywał wyników testu w pamięci podręcznej.

Simon Frey
źródło

Odpowiedzi:

173

Istnieje kilka opcji opisanych w dokumentach dotyczących flag testowych :

  • go clean -testcache: wygasa wszystkie wyniki testów
  • używaj flag, których nie można buforować w swoim przebiegu testowym. Idiomatycznym sposobem jest użycie-count=1

To powiedziawszy, zmiany w kodzie lub kodzie testowym unieważnią wyniki testów w pamięci podręcznej (istnieje rozszerzona logika podczas korzystania z plików lokalnych lub zmiennych środowiskowych), więc nie powinno być potrzeby ręcznego unieważniania pamięci podręcznej testów.

Marc
źródło
4
Jest to nadal przydatne w przypadku, gdy testujesz pod kątem ruchomej zależności, np. Bazy danych, w której konfigurujesz / usuwasz zależność, ale nie kod. Wygląda na to, że OP testował niedziałający interfejs API, co spowodowało, że zadali pytanie.
joakim
czy można wyczyścić pamięć podręczną tylko dla określonych testów?
nickcamillo
3
Zauważ, że to go clean -testcache ./...też działa (na szczycie monorepo)
voutasaurus
Otworzyłem numer, aby to również ulepszyć
wesm
28

W Go11 nie mogłem wyłączyć pamięci podręcznej przy użyciu GOCACHEmodułów, -count=1zamiast tego użyłem :

go test -count=1

Przed wyjazdem11:

GOCACHE=off go test

Lub wyczyść pamięć podręczną testów i uruchom test ponownie:

go clean -testcache && go test 
Muhammad Soliman
źródło
19

Jest też GOCACHE=offwspomnieć tutaj .

soltysh
źródło
5
Bo go 1.11i posiadanie funkcji modułów go przy używaniu GOCACHE=offpowoduje błąd go: cannot use modules with build cache disabled. Lepiej jest użyć sugerowanych -count 1.
zdebra
1
Masz rację, zgodnie z github.com/golang/go/issues/26809#issuecomment-410477084 GOCACHE będzie powoli wycofywana z wersji 1.12, więc używanie go test -count=1 ...jest teraz bezpieczniejszym wyborem.
soltysh
build cache is disabled by GOCACHE=off, but required as of Go 1.12
Francesco Casula
7

Sposób, w jaki to naprawiłem (używam Visual Studio Code na macOS):

Kod> Preferencje> Ustawienia

Kliknij ... po prawej stronie strony ustawień

Kliknij Open settings.json

Zarówno:

  1. Dodaj następujący fragment kodu do pliku settings.json

    "go.testEnvVars": {
        "GOCACHE": "off"
    }
    
  2. Zmień wartość, go.testEnvVarsaby uwzględnić następujące elementy:"GOCACHE": "off"
zniekształcony sygnał
źródło
5
Kompilacja pamięci podręcznej jest wymagana od wersji Go 1.12, dlatego ustawienie GOCACHEnie będzie działać z ostatnimi wersjami Go. Rozwiązaniem dla VS Code jest ustawienie "go.testFlags": ["-count=1"]w ustawieniach.
Armand Grillet