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.

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.


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 

18

Es wird auch hierGOCACHE=off erwähnt .


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"

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.