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.

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.


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 

19

Jest też GOCACHE=offwspomnieć tutaj .


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"

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.