Yeniden test etmeye zorlayın veya testi önbelleğe almayı devre dışı bırakın


108

Sorun:

Aynı go testini iki kez çalıştırdığımda, ikinci çalışma hiç yapılmıyor. Sonuçlar, ilk çalıştırmada önbelleğe alınmış olanlardır.

PASS    
ok      tester/apitests    (cached)

Bağlantılar

Https://golang.org/cmd/go/#hdr-Testing_flags'ı zaten kontrol ettim, ancak bu amaç için herhangi bir cli bayrağı yok.

Soru:

Test sonuçlarını önbelleğe almamak için her zaman testi çalıştırmaya zorlama olasılığı var mı?

Yanıtlar:


163

Test bayrakları belgelerinde açıklandığı gibi birkaç seçenek vardır :

  • go clean -testcache: tüm test sonuçlarının geçerliliğini yitirir
  • test çalıştırmanızda önbelleğe alınamayan bayraklar kullanın. Deyimsel yol kullanmaktır-count=1

Bununla birlikte, kodunuzdaki veya test kodunuzdaki değişiklikler, önbelleğe alınmış test sonuçlarını geçersiz kılar (yerel dosyalar veya ortam değişkenlerini kullanırken de genişletilmiş mantık vardır), bu nedenle test önbelleğini manuel olarak geçersiz kılmanıza gerek kalmaz.


4
Değişen bir bağımlılığa karşı test yapıyorsanız, örneğin, bağımlılığı kurduğunuz / kaldırdığınız ancak kodunuzu değil, bir veritabanı gibi, yine de yararlıdır. Görünüşe göre OP, sorularını harekete geçiren, stubed olmayan bir API'ye karşı test yapıyordu.
joakim

önbelleği yalnızca belirli testler için temizlemek mümkün mü?
nickcamillo

3
Bunun da go clean -testcache ./...işe yaradığını unutmayın (bir monorepinin tepesinde)
voutasaurus

Bunu daha iyi hale getirmek için bir sorun açtım: github.com/golang/go/issues/39056?ts=4
wesm

23

Go11'de GOCACHEmodüllerle birlikte önbelleği devre dışı bırakamadım, -count=1bunun yerine kullandım :

go test -count=1

Go11'den önce:

GOCACHE=off go test

Veya test önbelleğini temizleyin ve testi tekrar çalıştırın:

go clean -testcache && go test 

19

Ayrıca var GOCACHE=offsözü burada .


5
For go 1.11ve go modülleri özelliğinin kullanılması GOCACHE=offbir hata verir go: cannot use modules with build cache disabled. Daha iyi, önerilenleri kullanmaktır -count 1.
zdebra

1
Haklısın, github.com/golang/go/issues/26809#issuecomment-410477084'e göre 1.12'deGOCACHE yavaş yavaş kullanımdan kaldırılacak, bu yüzden kullanmak go test -count=1 ...artık daha güvenli bir seçim.
soltysh

build cache is disabled by GOCACHE=off, but required as of Go 1.12
Francesco Casula

7

Bunu düzelttiğim yol (macOS'ta Visual Studio Code kullanıyorum):

Kod> Tercihler> Ayarlar

...Ayarlar sayfasının sağ tarafına tıklayın

Tıklayın Open settings.json

Ya:

  1. Aşağıdaki parçacığı settings.json dosyanıza ekleyin

    "go.testEnvVars": {
        "GOCACHE": "off"
    }
    
  2. go.testEnvVarsAşağıdakileri içerecek şekilde değerini değiştirin :"GOCACHE": "off"

4
Go 1.12'den itibaren derleme önbelleği gereklidir, bu nedenle ayar GOCACHE, Go'nun son sürümlerinde çalışmayacaktır. VS Code için bir çözüm "go.testFlags": ["-count=1"], ayarlarda ayarlamaktır.
Armand Grillet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.