Erzwingen Sie einen erneuten Test oder deaktivieren Sie das Test-Caching

99

Problem:

Wenn ich denselben Go-Test zweimal durchführe, wird der zweite Lauf überhaupt nicht durchgeführt. Die Ergebnisse sind die zwischengespeicherten Ergebnisse aus dem ersten Lauf.

PASS    
ok      tester/apitests    (cached)

Links

Ich habe bereits https://golang.org/cmd/go/#hdr-Testing_flags überprüft, aber es gibt kein CLI-Flag für diesen Zweck.

Frage:

Gibt es eine Möglichkeit, go test zu zwingen, immer Test auszuführen und Testergebnisse nicht zwischenzuspeichern.

Simon Frey
quelle

Antworten:

154

Es gibt einige Optionen, wie in den Testflags-Dokumenten beschrieben :

  • go clean -testcache: Läuft alle Testergebnisse ab
  • Verwenden Sie bei Ihrem Testlauf nicht zwischenspeicherbare Flags. Der idiomatische Weg ist zu verwenden-count=1

Änderungen an Ihrem Code oder Testcode machen die zwischengespeicherten Testergebnisse jedoch ungültig (es gibt auch eine erweiterte Logik, wenn lokale Dateien oder Umgebungsvariablen verwendet werden), sodass Sie den Testcache nicht manuell ungültig machen müssen.

Marc
quelle
4
Dies ist immer noch nützlich, wenn Sie anhand einer sich bewegenden Abhängigkeit testen, z. B. einer Datenbank, in der Sie die Abhängigkeit einrichten / herunterfahren, jedoch nicht Ihren Code. Es sieht so aus, als würde OP gegen eine nicht gestubbte API testen, was ihre Frage veranlasste.
Joakim
Ist es möglich, den Cache nur für bestimmte Tests zu bereinigen?
Nickcamillo
3
Beachten Sie, dass dies auch go clean -testcache ./...funktioniert (oben auf einem Monorepo)
Voutasaurus
Ich habe eine Ausgabe geöffnet, um dies ebenfalls zu
verbessern
20

In Go11 konnte ich den Cache GOCACHEmit Modulen nicht deaktivieren. Stattdessen habe ich Folgendes verwendet -count=1:

go test -count=1

Vor Go11:

GOCACHE=off go test

Oder bereinigen Sie den Testcache und führen Sie den Test erneut aus:

go clean -testcache && go test 
Muhammad Soliman
quelle
18

Es wird auch hierGOCACHE=off erwähnt .

Soltysh
quelle
5
Für go 1.11und mit Go-Modulen wird bei der Verwendung GOCACHE=offein Fehler angezeigt go: cannot use modules with build cache disabled. Umso besser ist es, empfohlen zu verwenden -count 1.
Zdebra
1
Sie haben Recht, laut github.com/golang/go/issues/26809#issuecomment-410477084 GOCACHE wird die Einstellung in Go 1.12 langsam eingestellt, sodass die Verwendung go test -count=1 ...jetzt sicherer ist.
Soltysh
build cache is disabled by GOCACHE=off, but required as of Go 1.12
Francesco Casula
6

So habe ich das behoben (ich verwende Visual Studio Code unter macOS):

Code> Einstellungen> Einstellungen

Klicken Sie ...auf der rechten Seite der Einstellungsseite auf

Klicken Open settings.json

Entweder:

  1. Fügen Sie der Datei settings.json das folgende Snippet hinzu

    "go.testEnvVars": {
        "GOCACHE": "off"
    }
  2. Ändern Sie den Wert von go.testEnvVars, um Folgendes einzuschließen:"GOCACHE": "off"
verzerrtes Signal
quelle
3
Der Build-Cache ist ab Go 1.12 erforderlich, GOCACHEdaher funktioniert die Einstellung mit den neuesten Versionen von Go nicht. Eine Lösung für VS Code besteht darin, "go.testFlags": ["-count=1"]die Einstellungen vorzunehmen.
Armand Grillet