강제 재 테스트 또는 테스트 캐싱 비활성화


116

문제:

동일한 go 테스트를 두 번 실행하면 두 번째 실행이 전혀 수행되지 않습니다. 결과는 첫 번째 실행에서 캐시 된 결과입니다.

PASS    
ok      tester/apitests    (cached)

연결

이미 https://golang.org/cmd/go/#hdr-Testing_flags를 확인 했지만 해당 목적을위한 cli 플래그가 없습니다.

질문:

테스트 결과를 캐시하지 않고 항상 테스트를 실행하도록 강제로 이동할 가능성이 있습니까?

답변:


174

테스트 플래그 문서에 설명 된대로 몇 가지 옵션이 있습니다 .

  • go clean -testcache: 모든 테스트 결과 만료
  • 테스트 실행시 캐시 할 수없는 플래그를 사용합니다. 관용적 인 방법은-count=1

즉, 코드 또는 테스트 코드를 변경하면 캐시 된 테스트 결과가 무효화되므로 (로컬 파일 또는 환경 변수를 사용할 때도 확장 논리가 있음) 테스트 캐시를 수동으로 무효화 할 필요가 없습니다.


4
코드가 아닌 종속성을 설정 / 해체하는 데이터베이스와 같이 움직이는 종속성에 대해 테스트하는 경우에도 여전히 유용합니다. OP가 스터브되지 않은 API에 대해 테스트 한 것 같습니다.
joakim apr

특정 테스트에 대해서만 캐시를 정리할 수 있습니까?
nickcamillo

4
go clean -testcache ./...(A monorepo의 상단에) 너무 일
voutasaurus

이 문제를 개선하기 위해 문제를 열었습니다. github.com/golang/go/issues/39056?ts=4
wesm

28

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 에 따르면 GOCACHEgo 1.12에서 천천히 단계적으로 제거되므로 지금 사용하는 go test -count=1 ...것이 더 안전한 선택입니다.
soltysh

build cache is disabled by GOCACHE=off, but required as of Go 1.12
프란체스코 Casula

7

이 문제를 해결 한 방법 (macOS에서 Visual Studio Code를 사용하고 있습니다) :

코드> 환경 설정> 설정

...설정 페이지의 오른쪽을 클릭 하십시오.

딸깍 하는 소리 Open settings.json

어느 한 쪽:

  1. settings.json 파일에 다음 코드 조각을 추가합니다.

    "go.testEnvVars": {
        "GOCACHE": "off"
    }
    
  2. go.testEnvVars다음을 포함하도록 의 값을 변경합니다 ."GOCACHE": "off"

5
Go 1.12부터 빌드 캐시가 필요하므로 GOCACHE최신 버전의 Go에서는 설정 이 작동하지 않습니다. VS Code에 대한 해결책은 설정 "go.testFlags": ["-count=1"]에서 설정하는 것입니다.
Armand Grillet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.