再テストを強制するか、テストキャッシュを無効にします


106

問題:

同じgoテストを2回実行すると、2回目の実行はまったく行われません。結果は、最初の実行からキャッシュされたものです。

PASS    
ok      tester/apitests    (cached)

リンク

https://golang.org/cmd/go/#hdr-Testing_flagsをすでに確認しましたが、その目的のためのcliフラグはありません。

質問:

go testに、テスト結果をキャッシュせずに常にテストを実行するように強制する可能性はありますか?

回答:


161

テストフラグのドキュメントで説明されているように、いくつかのオプションがあります。

  • go clean -testcache:すべてのテスト結果が期限切れになります
  • テストの実行時にキャッシュ不可能なフラグを使用します。慣用的な方法は使用することです-count=1

とはいえ、コードまたはテストコードを変更すると、キャッシュされたテスト結果が無効になるため(ローカルファイルまたは環境変数を使用する場合も拡張ロジックがあります)、テストキャッシュを手動で無効にする必要はありません。


4
移動する依存関係に対してテストする場合、たとえば、依存関係をセットアップ/破棄するがコードではないデータベースの場合は、引き続き役立ちます。OPがスタブされていないAPIに対してテストしていたようで、それが彼らの質問を促したものです。
joakim 2018

特定のテストのためだけにキャッシュをクリーンアップすることは可能ですか?
nickcamillo

3
go clean -testcache ./...(monorepoの上部に)あまりにも動作します
voutasaurus

これも改善するために問題を開きました:github.com/golang/go/issues/39056
ts

23

Go11では、GOCACHEモジュールを使用してキャッシュを無効にすることはできませんでした。-count=1代わりに次を使用しました。

go test -count=1

Go11より前:

GOCACHE=off go test

または、テストキャッシュをクリーンアップして、テストを再実行します。

go clean -testcache && go test 

19

ここにGOCACHE=off言及されています


5
以下の場合go 1.11と使用した上で、外出先のモジュールの機能を有するGOCACHE=offエラーが発生しますgo: cannot use modules with build cache disabled。提案され-count 1たを使用することをお勧めします。
zdebra

1
そうです、github.com / golang / go / issues / 26809#issuecomment-410477084 によるとGOCACHE、go 1.12では徐々に段階的に廃止されるため、go test -count=1 ...今は使用する方が安全です。
soltysh

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

7

これを修正した方法(macOSでVisual Studio Codeを使用しています):

コード>設定>設定

...設定ページの右側をクリックします

クリック Open settings.json

どちらか:

  1. 次のスニペットをsettings.jsonファイルに追加します

    "go.testEnvVars": {
        "GOCACHE": "off"
    }
    
  2. の値を変更してgo.testEnvVars、以下を含めます。"GOCACHE": "off"

4
Go 1.12以降、ビルドキャッシュが必要であるためGOCACHE、最近のバージョンのGoでは設定が機能しません。VS Codeの解決策は、設定"go.testFlags": ["-count=1"]で設定することです。
ArmandGrillet19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.